From 6dedf3d49dd14c3bf541c8ecee7ffaac5f0e1d6c Mon Sep 17 00:00:00 2001 From: Heiko Schocher Date: Thu, 21 Dec 2006 16:14:48 +0100 Subject: [PATCH] Add support for the UC101 board from MAN. Signed-off-by: Heiko Schocher --- include/configs/uc101.h | 353 ++++++++++++++++++++++++++++++++++++++++++++++++ include/dtt.h | 9 ++ 2 files changed, 362 insertions(+) create mode 100644 include/configs/uc101.h (limited to 'include') diff --git a/include/configs/uc101.h b/include/configs/uc101.h new file mode 100644 index 00000000000..8cd8e9be709 --- /dev/null +++ b/include/configs/uc101.h @@ -0,0 +1,353 @@ +/* + * (C) Copyright 2003-2006 + * Heiko Schocher, DENX Software Engineering, hs@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 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 __CONFIG_H +#define __CONFIG_H + +/* + * High Level Configuration Options + * (easy to change) + */ + +#define CONFIG_MPC5xxx 1 /* This is an MPC5xxx CPU */ +#define CONFIG_MPC5200 1 /* (more precisely an MPC5200 CPU) */ +#define CONFIG_UC101 1 /* UC101 board */ + +#define CFG_MPC5XXX_CLKIN 33000000 /* ... running at 33.000000MHz */ + +#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */ +#define BOOTFLAG_WARM 0x02 /* Software reboot */ + +#define CFG_CACHELINE_SIZE 32 /* For MPC5xxx CPUs */ +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +# define CFG_CACHELINE_SHIFT 5 /* log base 2 of the above value */ +#endif + +#define CONFIG_BOARD_EARLY_INIT_R + +/* + * Serial console configuration + */ +#define CONFIG_PSC_CONSOLE 1 /* console is on PSC1 */ +#define CONFIG_BAUDRATE 115200 /* ... at 115200 bps */ +#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200, 230400 } + +/* Partitions */ +#define CONFIG_DOS_PARTITION + +/* + * Supported commands + */ +#define CONFIG_COMMANDS (CONFIG_CMD_DFL | \ + CFG_CMD_DATE | \ + CFG_CMD_DISPLAY | \ + CFG_CMD_DHCP | \ + CFG_CMD_PING | \ + CFG_CMD_EEPROM | \ + CFG_CMD_I2C | \ + CFG_CMD_DTT | \ + CFG_CMD_IDE | \ + CFG_CMD_FAT | \ + CFG_CMD_NFS | \ + CFG_CMD_MII | \ + CFG_CMD_SNTP ) + +/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ +#include + +#define CONFIG_TIMESTAMP 1 /* Print image info with timestamp */ + +#if (TEXT_BASE == 0xFFF00000) /* Boot low */ +# define CFG_LOWBOOT 1 +#endif + +/* + * Autobooting + */ +#define CONFIG_BOOTDELAY 5 /* autoboot after 5 seconds */ + +#define CONFIG_PREBOOT "echo;" \ + "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \ + "echo" + +#undef CONFIG_BOOTARGS + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "netdev=eth0\0" \ + "nfsargs=setenv bootargs root=/dev/nfs rw " \ + "nfsroot=${serverip}:${rootpath}\0" \ + "ramargs=setenv bootargs root=/dev/ram rw\0" \ + "addwdt=setenv bootargs ${bootargs} wdt=off" \ + "addip=setenv bootargs ${bootargs} " \ + "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}" \ + ":${hostname}:${netdev}:off panic=1\0" \ + "flash_nfs=run nfsargs addip;" \ + "bootm ${kernel_addr}\0" \ + "net_nfs=tftp 300000 ${bootfile};run nfsargs addip addwdt;bootm\0" \ + "rootpath=/opt/eldk/ppc_82xx\0" \ + "" + +#define CONFIG_BOOTCOMMAND "run net_nfs" + +#define CONFIG_MISC_INIT_R 1 + +/* + * IPB Bus clocking configuration. + */ +#define CFG_IPBSPEED_133 /* define for 133MHz speed */ + +/* + * I2C configuration + */ +#define CONFIG_HARD_I2C 1 /* I2C with hardware support */ +#define CFG_I2C_MODULE 2 /* Select I2C module #1 or #2 */ + +#define CFG_I2C_SPEED 100000 /* 100 kHz */ +#define CFG_I2C_SLAVE 0x7F + +/* + * EEPROM configuration + */ +#define CFG_I2C_EEPROM_ADDR 0x58 +#define CFG_I2C_EEPROM_ADDR_LEN 1 +#define CFG_EEPROM_PAGE_WRITE_BITS 4 +#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10 +/* for LM81 */ +#define CFG_EEPROM_PAGE_WRITE_ENABLE + +/* + * RTC configuration + */ +#define CONFIG_RTC_PCF8563 +#define CFG_I2C_RTC_ADDR 0x51 + +/* I2C SYSMON (LM75) */ +#define CONFIG_DTT_LM81 1 /* ON Semi's LM75 */ +#define CONFIG_DTT_SENSORS {0} /* Sensor addresses */ +#define CFG_DTT_MAX_TEMP 70 +#define CFG_DTT_LOW_TEMP -30 +#define CFG_DTT_HYSTERESIS 3 + +/* + * Flash configuration + */ +#define CFG_FLASH_BASE 0xFF800000 + +#define CFG_FLASH_SIZE 0x00800000 /* 8 MByte */ +#define CFG_MAX_FLASH_SECT 140 /* max num of sects on one chip */ + +#define CFG_ENV_ADDR (TEXT_BASE+0x40000) /* second sector */ +#define CFG_MAX_FLASH_BANKS 1 /* max num of flash banks + (= chip selects) */ +#define CFG_FLASH_ERASE_TOUT 240000 /* Flash Erase Timeout (in ms) */ +#define CFG_FLASH_WRITE_TOUT 500 /* Flash Write Timeout (in ms) */ + +#define CFG_FLASH_CFI_DRIVER +#define CFG_FLASH_CFI +#define CFG_FLASH_EMPTY_INFO +#define CFG_FLASH_CFI_AMD_RESET + +/* + * Environment settings + */ +#define CFG_ENV_IS_IN_FLASH 1 +#define CFG_ENV_SIZE 0x4000 +#define CFG_ENV_SECT_SIZE 0x10000 +#define CFG_ENV_OFFSET_REDUND (CFG_ENV_OFFSET+CFG_ENV_SECT_SIZE) +#define CFG_ENV_SIZE_REDUND (CFG_ENV_SIZE) + +/* + * Memory map + */ +#define CFG_MBAR 0xF0000000 +#define CFG_DEFAULT_MBAR 0x80000000 + +#define CFG_SDRAM_BASE 0x00000000 +#define CFG_SRAM_BASE 0x80100000 /* CS 1 */ +#define CFG_DISPLAY_BASE 0x80600000 /* CS 3 */ +#define CFG_IB_MASTER 0xc0510000 /* CS 6 */ +#define CFG_IB_EPLD 0xc0500000 /* CS 7 */ + +/* Settings for XLB = 132 MHz */ +#define SDRAM_DDR 1 +#define SDRAM_MODE 0x018D0000 +#define SDRAM_EMODE 0x40090000 +#define SDRAM_CONTROL 0x714f0f00 +#define SDRAM_CONFIG1 0x73722930 +#define SDRAM_CONFIG2 0x47770000 +#define SDRAM_TAPDELAY 0x10000000 + +/* SRAM */ +#define SRAM_BASE CFG_SRAM_BASE /* SRAM base address */ +#define SRAM_LEN 0x1fffff +#define SRAM_END (SRAM_BASE + SRAM_LEN) + +/* Use ON-Chip SRAM until RAM will be available */ +#define CFG_INIT_RAM_ADDR MPC5XXX_SRAM +#ifdef CONFIG_POST +/* preserve space for the post_word at end of on-chip SRAM */ +#define CFG_INIT_RAM_END MPC5XXX_SRAM_POST_SIZE +#else +#define CFG_INIT_RAM_END MPC5XXX_SRAM_SIZE +#endif + + +#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */ +#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) +#define CFG_INIT_SP_OFFSET CFG_GBL_DATA_OFFSET + +#define CFG_MONITOR_BASE TEXT_BASE +#if (CFG_MONITOR_BASE < CFG_FLASH_BASE) +# define CFG_RAMBOOT 1 +#endif + +#define CFG_MONITOR_LEN (192 << 10) /* Reserve 192 kB for Monitor */ +#define CFG_MALLOC_LEN (512 << 10) /* Reserve 128 kB for malloc() */ +#define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */ + +/* + * Ethernet configuration + */ +#define CONFIG_MPC5xxx_FEC 1 +#define CONFIG_PHY_ADDR 0x00 +#define CONFIG_MII 1 + +/* + * GPIO configuration + */ +#define CFG_GPS_PORT_CONFIG 0x4d558044 + +/*use Hardware WDT */ +#define CONFIG_HW_WATCHDOG + +/* + * Miscellaneous configurable options + */ +#define CFG_LONGHELP /* undef to save memory */ +#define CFG_PROMPT "=> " /* Monitor Command Prompt */ +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CFG_CBSIZE 1024 /* Console I/O Buffer Size */ +#else +#define CFG_CBSIZE 256 /* Console I/O Buffer Size */ +#endif +#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ +#define CFG_MAXARGS 16 /* max number of command args */ +#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ + +/* Enable an alternate, more extensive memory test */ +#define CFG_ALT_MEMTEST + +#define CFG_MEMTEST_START 0x00300000 /* memtest works on */ +#define CFG_MEMTEST_END 0x00f00000 /* 3 ... 15 MB in DRAM */ + +#define CFG_LOAD_ADDR 0x300000 /* default load address */ + +#define CFG_HZ 1000 /* decrementer freq: 1 ms ticks */ + +/* + * Enable loopw commando. This has only affect, if CFG_CMD_MEM is defined, + * which is normally part of the default commands (CFV_CMD_DFL) + */ +#define CONFIG_LOOPW + +/* + * Various low-level settings + */ +#if defined(CONFIG_MPC5200) +#define CFG_HID0_INIT HID0_ICE | HID0_ICFI +#define CFG_HID0_FINAL HID0_ICE +#else +#define CFG_HID0_INIT 0 +#define CFG_HID0_FINAL 0 +#endif + +#define CFG_BOOTCS_START CFG_FLASH_BASE +#define CFG_BOOTCS_SIZE CFG_FLASH_SIZE +#define CFG_BOOTCS_CFG 0x00045D00 +#define CFG_CS0_START CFG_FLASH_BASE +#define CFG_CS0_SIZE CFG_FLASH_SIZE + +/* 8Mbit SRAM @0x80100000 */ +#define CFG_CS1_START CFG_SRAM_BASE +#define CFG_CS1_SIZE 0x00100000 +#define CFG_CS1_CFG 0x21D00 + +/* Display H1, Status Inputs, EPLD @0x80600000 8 Bit */ +#define CFG_CS3_START CFG_DISPLAY_BASE +#define CFG_CS3_SIZE 0x00000100 +#define CFG_CS3_CFG 0x00081802 + +/* Interbus Master 16 Bit */ +#define CFG_CS6_START CFG_IB_MASTER +#define CFG_CS6_SIZE 0x00010000 +#define CFG_CS6_CFG 0x00FF3500 + +/* Interbus EPLD 8 Bit */ +#define CFG_CS7_START CFG_IB_EPLD +#define CFG_CS7_SIZE 0x00010000 +#define CFG_CS7_CFG 0x00081800 + +#define CFG_CS_BURST 0x00000000 +#define CFG_CS_DEADCYCLE 0x33333333 + +/*----------------------------------------------------------------------- + * IDE/ATA stuff Supports IDE harddisk + *----------------------------------------------------------------------- + */ + +#undef CONFIG_IDE_8xx_PCCARD /* Use IDE with PC Card Adapter */ + +#undef CONFIG_IDE_8xx_DIRECT /* Direct IDE not supported */ +#undef CONFIG_IDE_LED /* LED for ide not supported */ + +#define CFG_IDE_MAXBUS 1 /* max. 1 IDE bus */ +#define CFG_IDE_MAXDEVICE 2 /* max. 2 drives per IDE bus */ + +#define CONFIG_IDE_PREINIT 1 +/* #define CONFIG_IDE_RESET 1 beispile siehe tqm5200.c */ + +#define CFG_ATA_IDE0_OFFSET 0x0000 + +#define CFG_ATA_BASE_ADDR MPC5XXX_ATA + +/* Offset for data I/O */ +#define CFG_ATA_DATA_OFFSET (0x0060) + +/* Offset for normal register accesses */ +#define CFG_ATA_REG_OFFSET (CFG_ATA_DATA_OFFSET) + +/* Offset for alternate registers */ +#define CFG_ATA_ALT_OFFSET (0x005C) + +/* Interval between registers */ +#define CFG_ATA_STRIDE 4 + +#define CONFIG_ATAPI 1 + +/*---------------------------------------------------------------------*/ +/* Display addresses */ +/*---------------------------------------------------------------------*/ +#define CFG_DISP_CHR_RAM (CFG_DISPLAY_BASE + 0x38) +#define CFG_DISP_CWORD (CFG_DISPLAY_BASE + 0x30) + +#endif /* __CONFIG_H */ diff --git a/include/dtt.h b/include/dtt.h index a17aa677032..842a761c909 100644 --- a/include/dtt.h +++ b/include/dtt.h @@ -29,6 +29,7 @@ #if defined(CONFIG_DTT_LM75) || \ defined(CONFIG_DTT_DS1621) || \ + defined(CONFIG_DTT_LM81) || \ defined(CONFIG_DTT_ADM1021) #define CONFIG_DTT /* We have a DTT */ @@ -58,6 +59,14 @@ extern int dtt_get_temp(int sensor); #define DTT_TEMP_SET 0x3 #endif +#if defined(CONFIG_DTT_LM81) +#define DTT_READ_TEMP 0x27 +#define DTT_CONFIG_TEMP 0x4b +#define DTT_TEMP_MAX 0x39 +#define DTT_TEMP_HYST 0x3a +#define DTT_CONFIG 0x40 +#endif + #if defined(CONFIG_DTT_DS1621) #define DTT_READ_TEMP 0xAA #define DTT_READ_COUNTER 0xA8 -- cgit v1.3.1 From cce4acbb68398634b8d011ed7bb0d12269c84230 Mon Sep 17 00:00:00 2001 From: Bartlomiej Sieka Date: Thu, 28 Dec 2006 19:08:21 +0100 Subject: Few V38B changes: - fix a typo in V38B config file - move watchdog initialisation earlier in the boot process - add "wdt=off" to default kernel command line (disables kernel watchdog) --- board/v38b/v38b.c | 21 ++++++++++++--------- include/configs/v38b.h | 7 ++++--- 2 files changed, 16 insertions(+), 12 deletions(-) (limited to 'include') diff --git a/board/v38b/v38b.c b/board/v38b/v38b.c index dede9968801..ace4aa2caed 100644 --- a/board/v38b/v38b.c +++ b/board/v38b/v38b.c @@ -191,16 +191,8 @@ int checkboard (void) return 0; } - -int board_early_init_r(void) +int board_early_init_f(void) { - /* - * Now, when we are in RAM, enable flash write access for the - * detection process. Note that CS_BOOT cannot be cleared when - * executing in flash. - */ - *(vu_long *) MPC5XXX_BOOTCS_CFG &= ~0x1; /* clear RO */ - #ifdef CONFIG_HW_WATCHDOG /* * Enable and configure the direction (output) of PSC3_9 - watchdog @@ -210,6 +202,17 @@ int board_early_init_r(void) *(vu_long *) MPC5XXX_WU_GPIO_ENABLE |= GPIO_PSC3_9; *(vu_long *) MPC5XXX_WU_GPIO_DIR |= GPIO_PSC3_9; #endif /* CONFIG_HW_WATCHDOG */ + return 0; +} + +int board_early_init_r(void) +{ + /* + * Now, when we are in RAM, enable flash write access for the + * detection process. Note that CS_BOOT cannot be cleared when + * executing in flash. + */ + *(vu_long *) MPC5XXX_BOOTCS_CFG &= ~0x1; /* clear RO */ /* * Enable GPIO_WKUP_7 to "read the status of the actual power diff --git a/include/configs/v38b.h b/include/configs/v38b.h index 554a7a41b8e..e19591d2993 100644 --- a/include/configs/v38b.h +++ b/include/configs/v38b.h @@ -39,6 +39,7 @@ #define CONFIG_NETCONSOLE 1 #define CONFIG_BOARD_EARLY_INIT_R 1 /* do board-specific init */ +#define CONFIG_BOARD_EARLY_INIT_F 1 /* do board-specific init */ #define CFG_XLB_PIPELINING 1 /* gives better performance */ @@ -101,7 +102,7 @@ CFG_CMD_IRQ | \ CFG_CMD_JFFS2 | \ CFG_CMD_MII | \ - CFG_CMD_SDRAMi | \ + CFG_CMD_SDRAM | \ CFG_CMD_DATE | \ CFG_CMD_USB | \ CFG_CMD_FAT) @@ -135,7 +136,7 @@ "preboot=echo;echo Type \"run flash_nfs\" to mount root " \ "filesystem over NFS; echo\0" \ "netdev=eth0\0" \ - "ramargs=setenv bootargs root=/dev/ram rw\0" \ + "ramargs=setenv bootargs root=/dev/ram rw wdt=off \0" \ "addip=setenv bootargs $(bootargs) " \ "ip=$(ipaddr):$(serverip):$(gatewayip):" \ "$(netmask):$(hostname):$(netdev):off panic=1\0" \ @@ -144,7 +145,7 @@ "$(ramdisk_addr)\0" \ "net_nfs=tftp 200000 $(bootfile);run nfsargs addip;bootm\0" \ "nfsargs=setenv bootargs root=/dev/nfs rw " \ - "nfsroot=$(serverip):$(rootpath)\0" \ + "nfsroot=$(serverip):$(rootpath) wdt=off\0" \ "hostname=v38b\0" \ "ethact=FEC ETHERNET\0" \ "rootpath=/opt/eldk-3.1.1/ppc_6xx\0" \ -- cgit v1.3.1 From 023889838282b6237b401664f22dd22dfba2c066 Mon Sep 17 00:00:00 2001 From: Stefan Roese Date: Fri, 5 Jan 2007 10:38:05 +0100 Subject: [PATCH] Add DDR2 optimization code for Sequoia (440EPx) board This code will optimize the DDR2 controller setup on a board specific basis. Note: This code doesn't work right now on the NAND booting image for the Sequoia board, since it doesn't fit into the 4kBytes for the SPL image. Signed-off-by: Stefan Roese --- board/amcc/sequoia/init.S | 2 +- board/amcc/sequoia/sdram.c | 366 ++++++++++++++++++++++++- board/amcc/sequoia/sdram.h | 508 +++++++++++++++++++++++++++++++++++ cpu/ppc4xx/cpu_init.c | 3 - include/configs/sequoia.h | 5 +- nand_spl/board/amcc/sequoia/Makefile | 2 + 6 files changed, 872 insertions(+), 14 deletions(-) create mode 100644 board/amcc/sequoia/sdram.h (limited to 'include') diff --git a/board/amcc/sequoia/init.S b/board/amcc/sequoia/init.S index 3d4ac8543d5..45bcd4bef75 100644 --- a/board/amcc/sequoia/init.S +++ b/board/amcc/sequoia/init.S @@ -90,7 +90,7 @@ tlbtab: /* * BOOT_CS (FLASH) must be first. Before relocation SA_I can be off to use the * speed up boot process. It is patched after relocation to enable SA_I - */ + */ #ifndef CONFIG_NAND_SPL tlbentry( CFG_BOOT_BASE_ADDR, SZ_256M, CFG_BOOT_BASE_ADDR, 1, AC_R|AC_W|AC_X|SA_G ) #else diff --git a/board/amcc/sequoia/sdram.c b/board/amcc/sequoia/sdram.c index 53f728def9d..77f14384480 100644 --- a/board/amcc/sequoia/sdram.c +++ b/board/amcc/sequoia/sdram.c @@ -1,4 +1,11 @@ /* + * (C) Copyright 2006 + * Sylvie Gohl, AMCC/IBM, gohl.sylvie@fr.ibm.com + * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com + * Thierry Roman, AMCC/IBM, thierry_roman@fr.ibm.com + * Alain Saurel, AMCC/IBM, alain.saurel@fr.ibm.com + * Robert Snyder, AMCC/IBM, rob.snyder@fr.ibm.com + * * (C) Copyright 2006 * Stefan Roese, DENX Software Engineering, sr@denx.de. * @@ -18,10 +25,352 @@ * MA 02111-1307 USA */ +/* define DEBUG for debug output */ +#undef DEBUG + #include #include +#include #include +#include "sdram.h" + +#if !defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL) || \ + defined(CONFIG_DDR_DATA_EYE) +/*-----------------------------------------------------------------------------+ + * wait_for_dlllock. + +----------------------------------------------------------------------------*/ +static int wait_for_dlllock(void) +{ + unsigned long val; + int wait = 0; + + /* -----------------------------------------------------------+ + * Wait for the DCC master delay line to finish calibration + * ----------------------------------------------------------*/ + mtdcr(ddrcfga, DDR0_17); + val = DDR0_17_DLLLOCKREG_UNLOCKED; + + while (wait != 0xffff) { + val = mfdcr(ddrcfgd); + if ((val & DDR0_17_DLLLOCKREG_MASK) == DDR0_17_DLLLOCKREG_LOCKED) + /* dlllockreg bit on */ + return 0; + else + wait++; + } + debug("0x%04x: DDR0_17 Value (dlllockreg bit): 0x%08x\n", wait, val); + debug("Waiting for dlllockreg bit to raise\n"); + + return -1; +} +#endif + +#if defined(CONFIG_DDR_DATA_EYE) +/*-----------------------------------------------------------------------------+ + * wait_for_dram_init_complete. + +----------------------------------------------------------------------------*/ +int wait_for_dram_init_complete(void) +{ + unsigned long val; + int wait = 0; + + /* --------------------------------------------------------------+ + * Wait for 'DRAM initialization complete' bit in status register + * -------------------------------------------------------------*/ + mtdcr(ddrcfga, DDR0_00); + + while (wait != 0xffff) { + val = mfdcr(ddrcfgd); + if ((val & DDR0_00_INT_STATUS_BIT6) == DDR0_00_INT_STATUS_BIT6) + /* 'DRAM initialization complete' bit */ + return 0; + else + wait++; + } + + debug("DRAM initialization complete bit in status register did not rise\n"); + + return -1; +} + +#define NUM_TRIES 64 +#define NUM_READS 10 + +/*-----------------------------------------------------------------------------+ + * denali_core_search_data_eye. + +----------------------------------------------------------------------------*/ +void denali_core_search_data_eye(unsigned long memory_size) +{ + int k, j; + u32 val; + u32 wr_dqs_shift, dqs_out_shift, dll_dqs_delay_X; + u32 max_passing_cases = 0, wr_dqs_shift_with_max_passing_cases = 0; + u32 passing_cases = 0, dll_dqs_delay_X_sw_val = 0; + u32 dll_dqs_delay_X_start_window = 0, dll_dqs_delay_X_end_window = 0; + volatile u32 *ram_pointer; + u32 test[NUM_TRIES] = { + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555, + 0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555, + 0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA, + 0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA, + 0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A, + 0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A, + 0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5, + 0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5, + 0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA, + 0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA, + 0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55, + 0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55 }; + + ram_pointer = (volatile u32 *)(CFG_SDRAM_BASE); + + for (wr_dqs_shift = 64; wr_dqs_shift < 96; wr_dqs_shift++) { + /*for (wr_dqs_shift=1; wr_dqs_shift<96; wr_dqs_shift++) {*/ + + /* -----------------------------------------------------------+ + * De-assert 'start' parameter. + * ----------------------------------------------------------*/ + mtdcr(ddrcfga, DDR0_02); + val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_OFF; + mtdcr(ddrcfgd, val); + + /* -----------------------------------------------------------+ + * Set 'wr_dqs_shift' + * ----------------------------------------------------------*/ + mtdcr(ddrcfga, DDR0_09); + val = (mfdcr(ddrcfgd) & ~DDR0_09_WR_DQS_SHIFT_MASK) + | DDR0_09_WR_DQS_SHIFT_ENCODE(wr_dqs_shift); + mtdcr(ddrcfgd, val); + + /* -----------------------------------------------------------+ + * Set 'dqs_out_shift' = wr_dqs_shift + 32 + * ----------------------------------------------------------*/ + dqs_out_shift = wr_dqs_shift + 32; + mtdcr(ddrcfga, DDR0_22); + val = (mfdcr(ddrcfgd) & ~DDR0_22_DQS_OUT_SHIFT_MASK) + | DDR0_22_DQS_OUT_SHIFT_ENCODE(dqs_out_shift); + mtdcr(ddrcfgd, val); + + passing_cases = 0; + + for (dll_dqs_delay_X = 1; dll_dqs_delay_X < 64; dll_dqs_delay_X++) { + /*for (dll_dqs_delay_X=1; dll_dqs_delay_X<128; dll_dqs_delay_X++) {*/ + /* -----------------------------------------------------------+ + * Set 'dll_dqs_delay_X'. + * ----------------------------------------------------------*/ + /* dll_dqs_delay_0 */ + mtdcr(ddrcfga, DDR0_17); + val = (mfdcr(ddrcfgd) & ~DDR0_17_DLL_DQS_DELAY_0_MASK) + | DDR0_17_DLL_DQS_DELAY_0_ENCODE(dll_dqs_delay_X); + mtdcr(ddrcfgd, val); + /* dll_dqs_delay_1 to dll_dqs_delay_4 */ + mtdcr(ddrcfga, DDR0_18); + val = (mfdcr(ddrcfgd) & ~DDR0_18_DLL_DQS_DELAY_X_MASK) + | DDR0_18_DLL_DQS_DELAY_4_ENCODE(dll_dqs_delay_X) + | DDR0_18_DLL_DQS_DELAY_3_ENCODE(dll_dqs_delay_X) + | DDR0_18_DLL_DQS_DELAY_2_ENCODE(dll_dqs_delay_X) + | DDR0_18_DLL_DQS_DELAY_1_ENCODE(dll_dqs_delay_X); + mtdcr(ddrcfgd, val); + /* dll_dqs_delay_5 to dll_dqs_delay_8 */ + mtdcr(ddrcfga, DDR0_19); + val = (mfdcr(ddrcfgd) & ~DDR0_19_DLL_DQS_DELAY_X_MASK) + | DDR0_19_DLL_DQS_DELAY_8_ENCODE(dll_dqs_delay_X) + | DDR0_19_DLL_DQS_DELAY_7_ENCODE(dll_dqs_delay_X) + | DDR0_19_DLL_DQS_DELAY_6_ENCODE(dll_dqs_delay_X) + | DDR0_19_DLL_DQS_DELAY_5_ENCODE(dll_dqs_delay_X); + mtdcr(ddrcfgd, val); + + ppcMsync(); + ppcMbar(); + + /* -----------------------------------------------------------+ + * Assert 'start' parameter. + * ----------------------------------------------------------*/ + mtdcr(ddrcfga, DDR0_02); + val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_ON; + mtdcr(ddrcfgd, val); + + ppcMsync(); + ppcMbar(); + + /* -----------------------------------------------------------+ + * Wait for the DCC master delay line to finish calibration + * ----------------------------------------------------------*/ + if (wait_for_dlllock() != 0) { + printf("dlllock did not occur !!!\n"); + printf("denali_core_search_data_eye!!!\n"); + printf("wr_dqs_shift = %d - dll_dqs_delay_X = %d\n", + wr_dqs_shift, dll_dqs_delay_X); + hang(); + } + ppcMsync(); + ppcMbar(); + + if (wait_for_dram_init_complete() != 0) { + printf("dram init complete did not occur !!!\n"); + printf("denali_core_search_data_eye!!!\n"); + printf("wr_dqs_shift = %d - dll_dqs_delay_X = %d\n", + wr_dqs_shift, dll_dqs_delay_X); + hang(); + } + udelay(100); /* wait 100us to ensure init is really completed !!! */ + + /* write values */ + for (j=0; j= max_passing_cases) { + max_passing_cases = passing_cases; + wr_dqs_shift_with_max_passing_cases = wr_dqs_shift; + dll_dqs_delay_X_start_window = dll_dqs_delay_X_sw_val; + dll_dqs_delay_X_end_window = dll_dqs_delay_X; + } + } + + /* -----------------------------------------------------------+ + * De-assert 'start' parameter. + * ----------------------------------------------------------*/ + mtdcr(ddrcfga, DDR0_02); + val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_OFF; + mtdcr(ddrcfgd, val); + + } /* for (dll_dqs_delay_X=0; dll_dqs_delay_X<128; dll_dqs_delay_X++) */ + + } /* for (wr_dqs_shift=0; wr_dqs_shift<96; wr_dqs_shift++) */ + + /* -----------------------------------------------------------+ + * Largest passing window is now detected. + * ----------------------------------------------------------*/ + + /* Compute dll_dqs_delay_X value */ + dll_dqs_delay_X = (dll_dqs_delay_X_end_window + dll_dqs_delay_X_start_window) / 2; + wr_dqs_shift = wr_dqs_shift_with_max_passing_cases; + + debug("DQS calibration - Window detected:\n"); + debug("max_passing_cases = %d\n", max_passing_cases); + debug("wr_dqs_shift = %d\n", wr_dqs_shift); + debug("dll_dqs_delay_X = %d\n", dll_dqs_delay_X); + debug("dll_dqs_delay_X window = %d - %d\n", + dll_dqs_delay_X_start_window, dll_dqs_delay_X_end_window); + + /* -----------------------------------------------------------+ + * De-assert 'start' parameter. + * ----------------------------------------------------------*/ + mtdcr(ddrcfga, DDR0_02); + val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_OFF; + mtdcr(ddrcfgd, val); + + /* -----------------------------------------------------------+ + * Set 'wr_dqs_shift' + * ----------------------------------------------------------*/ + mtdcr(ddrcfga, DDR0_09); + val = (mfdcr(ddrcfgd) & ~DDR0_09_WR_DQS_SHIFT_MASK) + | DDR0_09_WR_DQS_SHIFT_ENCODE(wr_dqs_shift); + mtdcr(ddrcfgd, val); + debug("DDR0_09=0x%08lx\n", val); + + /* -----------------------------------------------------------+ + * Set 'dqs_out_shift' = wr_dqs_shift + 32 + * ----------------------------------------------------------*/ + dqs_out_shift = wr_dqs_shift + 32; + mtdcr(ddrcfga, DDR0_22); + val = (mfdcr(ddrcfgd) & ~DDR0_22_DQS_OUT_SHIFT_MASK) + | DDR0_22_DQS_OUT_SHIFT_ENCODE(dqs_out_shift); + mtdcr(ddrcfgd, val); + debug("DDR0_22=0x%08lx\n", val); + + /* -----------------------------------------------------------+ + * Set 'dll_dqs_delay_X'. + * ----------------------------------------------------------*/ + /* dll_dqs_delay_0 */ + mtdcr(ddrcfga, DDR0_17); + val = (mfdcr(ddrcfgd) & ~DDR0_17_DLL_DQS_DELAY_0_MASK) + | DDR0_17_DLL_DQS_DELAY_0_ENCODE(dll_dqs_delay_X); + mtdcr(ddrcfgd, val); + debug("DDR0_17=0x%08lx\n", val); + + /* dll_dqs_delay_1 to dll_dqs_delay_4 */ + mtdcr(ddrcfga, DDR0_18); + val = (mfdcr(ddrcfgd) & ~DDR0_18_DLL_DQS_DELAY_X_MASK) + | DDR0_18_DLL_DQS_DELAY_4_ENCODE(dll_dqs_delay_X) + | DDR0_18_DLL_DQS_DELAY_3_ENCODE(dll_dqs_delay_X) + | DDR0_18_DLL_DQS_DELAY_2_ENCODE(dll_dqs_delay_X) + | DDR0_18_DLL_DQS_DELAY_1_ENCODE(dll_dqs_delay_X); + mtdcr(ddrcfgd, val); + debug("DDR0_18=0x%08lx\n", val); + + /* dll_dqs_delay_5 to dll_dqs_delay_8 */ + mtdcr(ddrcfga, DDR0_19); + val = (mfdcr(ddrcfgd) & ~DDR0_19_DLL_DQS_DELAY_X_MASK) + | DDR0_19_DLL_DQS_DELAY_8_ENCODE(dll_dqs_delay_X) + | DDR0_19_DLL_DQS_DELAY_7_ENCODE(dll_dqs_delay_X) + | DDR0_19_DLL_DQS_DELAY_6_ENCODE(dll_dqs_delay_X) + | DDR0_19_DLL_DQS_DELAY_5_ENCODE(dll_dqs_delay_X); + mtdcr(ddrcfgd, val); + debug("DDR0_19=0x%08lx\n", val); + + /* -----------------------------------------------------------+ + * Assert 'start' parameter. + * ----------------------------------------------------------*/ + mtdcr(ddrcfga, DDR0_02); + val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_ON; + mtdcr(ddrcfgd, val); + + ppcMsync(); + ppcMbar(); + + /* -----------------------------------------------------------+ + * Wait for the DCC master delay line to finish calibration + * ----------------------------------------------------------*/ + if (wait_for_dlllock() != 0) { + printf("dlllock did not occur !!!\n"); + hang(); + } + ppcMsync(); + ppcMbar(); + + if (wait_for_dram_init_complete() != 0) { + printf("dram init complete did not occur !!!\n"); + hang(); + } + udelay(100); /* wait 100us to ensure init is really completed !!! */ +} +#endif /* CONFIG_DDR_DATA_EYE */ + /************************************************************************* * * initdram -- 440EPx's DDR controller is a DENALI Core @@ -30,8 +379,6 @@ long int initdram (int board_type) { #if !defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL) - volatile ulong val; - mtsdram(DDR0_02, 0x00000000); mtsdram(DDR0_00, 0x0000190A); @@ -64,14 +411,15 @@ long int initdram (int board_type) mtsdram(DDR0_44, 0x00000005); mtsdram(DDR0_02, 0x00000001); - /* - * Wait for DCC master delay line to finish calibration - */ - mfsdram(DDR0_17, val); - while (((val >> 8) & 0x000007f) == 0) { - mfsdram(DDR0_17, val); - } + wait_for_dlllock(); #endif /* #ifndef CONFIG_NAND_U_BOOT */ +#ifdef CONFIG_DDR_DATA_EYE + /* -----------------------------------------------------------+ + * Perform data eye search if requested. + * ----------------------------------------------------------*/ + denali_core_search_data_eye(CFG_MBYTES_SDRAM << 20); +#endif + return (CFG_MBYTES_SDRAM << 20); } diff --git a/board/amcc/sequoia/sdram.h b/board/amcc/sequoia/sdram.h new file mode 100644 index 00000000000..48966cfd6f7 --- /dev/null +++ b/board/amcc/sequoia/sdram.h @@ -0,0 +1,508 @@ +/* + * (C) Copyright 2006 + * Sylvie Gohl, AMCC/IBM, gohl.sylvie@fr.ibm.com + * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com + * Thierry Roman, AMCC/IBM, thierry_roman@fr.ibm.com + * Alain Saurel, AMCC/IBM, alain.saurel@fr.ibm.com + * Robert Snyder, AMCC/IBM, rob.snyder@fr.ibm.com + * + * 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 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 _SPD_SDRAM_DENALI_H_ +#define _SPD_SDRAM_DENALI_H_ + +#define ppcMsync sync +#define ppcMbar eieio + +/* General definitions */ +#define MAX_SPD_BYTE 128 /* highest SPD byte # to read */ +#define DENALI_REG_NUMBER 45 /* 45 Regs in PPC440EPx Denali Core */ +#define SUPPORTED_DIMMS_NB 7 /* Number of supported DIMM modules types */ +#define SDRAM_NONE 0 /* No DIMM detected in Slot */ +#define MAXRANKS 2 /* 2 ranks maximum */ + +/* Supported PLB Frequencies */ +#define PLB_FREQ_133MHZ 133333333 +#define PLB_FREQ_152MHZ 152000000 +#define PLB_FREQ_160MHZ 160000000 +#define PLB_FREQ_166MHZ 166666666 + +/* Denali Core Registers */ +#define SDRAM_DCR_BASE 0x10 + +#define DDR_DCR_BASE 0x10 +#define ddrcfga (DDR_DCR_BASE+0x0) /* DDR configuration address reg */ +#define ddrcfgd (DDR_DCR_BASE+0x1) /* DDR configuration data reg */ + +/*-----------------------------------------------------------------------------+ + | Values for ddrcfga register - indirect addressing of these regs + +-----------------------------------------------------------------------------*/ + +#define DDR0_00 0x00 +#define DDR0_00_INT_ACK_MASK 0x7F000000 /* Write only */ +#define DDR0_00_INT_ACK_ALL 0x7F000000 +#define DDR0_00_INT_ACK_ENCODE(n) ((((unsigned long)(n))&0x7F)<<24) +#define DDR0_00_INT_ACK_DECODE(n) ((((unsigned long)(n))>>24)&0x7F) +/* Status */ +#define DDR0_00_INT_STATUS_MASK 0x00FF0000 /* Read only */ +/* Bit0. A single access outside the defined PHYSICAL memory space detected. */ +#define DDR0_00_INT_STATUS_BIT0 0x00010000 +/* Bit1. Multiple accesses outside the defined PHYSICAL memory space detected. */ +#define DDR0_00_INT_STATUS_BIT1 0x00020000 +/* Bit2. Single correctable ECC event detected */ +#define DDR0_00_INT_STATUS_BIT2 0x00040000 +/* Bit3. Multiple correctable ECC events detected. */ +#define DDR0_00_INT_STATUS_BIT3 0x00080000 +/* Bit4. Single uncorrectable ECC event detected. */ +#define DDR0_00_INT_STATUS_BIT4 0x00100000 +/* Bit5. Multiple uncorrectable ECC events detected. */ +#define DDR0_00_INT_STATUS_BIT5 0x00200000 +/* Bit6. DRAM initialization complete. */ +#define DDR0_00_INT_STATUS_BIT6 0x00400000 +/* Bit7. Logical OR of all lower bits. */ +#define DDR0_00_INT_STATUS_BIT7 0x00800000 + +#define DDR0_00_INT_STATUS_ENCODE(n) ((((unsigned long)(n))&0xFF)<<16) +#define DDR0_00_INT_STATUS_DECODE(n) ((((unsigned long)(n))>>16)&0xFF) +#define DDR0_00_DLL_INCREMENT_MASK 0x00007F00 +#define DDR0_00_DLL_INCREMENT_ENCODE(n) ((((unsigned long)(n))&0x7F)<<8) +#define DDR0_00_DLL_INCREMENT_DECODE(n) ((((unsigned long)(n))>>8)&0x7F) +#define DDR0_00_DLL_START_POINT_MASK 0x0000007F +#define DDR0_00_DLL_START_POINT_ENCODE(n) ((((unsigned long)(n))&0x7F)<<0) +#define DDR0_00_DLL_START_POINT_DECODE(n) ((((unsigned long)(n))>>0)&0x7F) + + + +#define DDR0_01 0x01 +#define DDR0_01_PLB0_DB_CS_LOWER_MASK 0x1F000000 +#define DDR0_01_PLB0_DB_CS_LOWER_ENCODE(n) ((((unsigned long)(n))&0x1F)<<24) +#define DDR0_01_PLB0_DB_CS_LOWER_DECODE(n) ((((unsigned long)(n))>>24)&0x1F) +#define DDR0_01_PLB0_DB_CS_UPPER_MASK 0x001F0000 +#define DDR0_01_PLB0_DB_CS_UPPER_ENCODE(n) ((((unsigned long)(n))&0x1F)<<16) +#define DDR0_01_PLB0_DB_CS_UPPER_DECODE(n) ((((unsigned long)(n))>>16)&0x1F) +#define DDR0_01_OUT_OF_RANGE_TYPE_MASK 0x00000700 /* Read only */ +#define DDR0_01_OUT_OF_RANGE_TYPE_ENCODE(n) ((((unsigned long)(n))&0x7)<<8) +#define DDR0_01_OUT_OF_RANGE_TYPE_DECODE(n) ((((unsigned long)(n))>>8)&0x7) +#define DDR0_01_INT_MASK_MASK 0x000000FF +#define DDR0_01_INT_MASK_ENCODE(n) ((((unsigned long)(n))&0xFF)<<0) +#define DDR0_01_INT_MASK_DECODE(n) ((((unsigned long)(n))>>0)&0xFF) +#define DDR0_01_INT_MASK_ALL_ON 0x000000FF +#define DDR0_01_INT_MASK_ALL_OFF 0x00000000 + +#define DDR0_02 0x02 +#define DDR0_02_MAX_CS_REG_MASK 0x02000000 /* Read only */ +#define DDR0_02_MAX_CS_REG_ENCODE(n) ((((unsigned long)(n))&0x2)<<24) +#define DDR0_02_MAX_CS_REG_DECODE(n) ((((unsigned long)(n))>>24)&0x2) +#define DDR0_02_MAX_COL_REG_MASK 0x000F0000 /* Read only */ +#define DDR0_02_MAX_COL_REG_ENCODE(n) ((((unsigned long)(n))&0xF)<<16) +#define DDR0_02_MAX_COL_REG_DECODE(n) ((((unsigned long)(n))>>16)&0xF) +#define DDR0_02_MAX_ROW_REG_MASK 0x00000F00 /* Read only */ +#define DDR0_02_MAX_ROW_REG_ENCODE(n) ((((unsigned long)(n))&0xF)<<8) +#define DDR0_02_MAX_ROW_REG_DECODE(n) ((((unsigned long)(n))>>8)&0xF) +#define DDR0_02_START_MASK 0x00000001 +#define DDR0_02_START_ENCODE(n) ((((unsigned long)(n))&0x1)<<0) +#define DDR0_02_START_DECODE(n) ((((unsigned long)(n))>>0)&0x1) +#define DDR0_02_START_OFF 0x00000000 +#define DDR0_02_START_ON 0x00000001 + +#define DDR0_03 0x03 +#define DDR0_03_BSTLEN_MASK 0x07000000 +#define DDR0_03_BSTLEN_ENCODE(n) ((((unsigned long)(n))&0x7)<<24) +#define DDR0_03_BSTLEN_DECODE(n) ((((unsigned long)(n))>>24)&0x7) +#define DDR0_03_CASLAT_MASK 0x00070000 +#define DDR0_03_CASLAT_ENCODE(n) ((((unsigned long)(n))&0x7)<<16) +#define DDR0_03_CASLAT_DECODE(n) ((((unsigned long)(n))>>16)&0x7) +#define DDR0_03_CASLAT_LIN_MASK 0x00000F00 +#define DDR0_03_CASLAT_LIN_ENCODE(n) ((((unsigned long)(n))&0xF)<<8) +#define DDR0_03_CASLAT_LIN_DECODE(n) ((((unsigned long)(n))>>8)&0xF) +#define DDR0_03_INITAREF_MASK 0x0000000F +#define DDR0_03_INITAREF_ENCODE(n) ((((unsigned long)(n))&0xF)<<0) +#define DDR0_03_INITAREF_DECODE(n) ((((unsigned long)(n))>>0)&0xF) + +#define DDR0_04 0x04 +#define DDR0_04_TRC_MASK 0x1F000000 +#define DDR0_04_TRC_ENCODE(n) ((((unsigned long)(n))&0x1F)<<24) +#define DDR0_04_TRC_DECODE(n) ((((unsigned long)(n))>>24)&0x1F) +#define DDR0_04_TRRD_MASK 0x00070000 +#define DDR0_04_TRRD_ENCODE(n) ((((unsigned long)(n))&0x7)<<16) +#define DDR0_04_TRRD_DECODE(n) ((((unsigned long)(n))>>16)&0x7) +#define DDR0_04_TRTP_MASK 0x00000700 +#define DDR0_04_TRTP_ENCODE(n) ((((unsigned long)(n))&0x7)<<8) +#define DDR0_04_TRTP_DECODE(n) ((((unsigned long)(n))>>8)&0x7) + +#define DDR0_05 0x05 +#define DDR0_05_TMRD_MASK 0x1F000000 +#define DDR0_05_TMRD_ENCODE(n) ((((unsigned long)(n))&0x1F)<<24) +#define DDR0_05_TMRD_DECODE(n) ((((unsigned long)(n))>>24)&0x1F) +#define DDR0_05_TEMRS_MASK 0x00070000 +#define DDR0_05_TEMRS_ENCODE(n) ((((unsigned long)(n))&0x7)<<16) +#define DDR0_05_TEMRS_DECODE(n) ((((unsigned long)(n))>>16)&0x7) +#define DDR0_05_TRP_MASK 0x00000F00 +#define DDR0_05_TRP_ENCODE(n) ((((unsigned long)(n))&0xF)<<8) +#define DDR0_05_TRP_DECODE(n) ((((unsigned long)(n))>>8)&0xF) +#define DDR0_05_TRAS_MIN_MASK 0x000000FF +#define DDR0_05_TRAS_MIN_ENCODE(n) ((((unsigned long)(n))&0xFF)<<0) +#define DDR0_05_TRAS_MIN_DECODE(n) ((((unsigned long)(n))>>0)&0xFF) + +#define DDR0_06 0x06 +#define DDR0_06_WRITEINTERP_MASK 0x01000000 +#define DDR0_06_WRITEINTERP_ENCODE(n) ((((unsigned long)(n))&0x1)<<24) +#define DDR0_06_WRITEINTERP_DECODE(n) ((((unsigned long)(n))>>24)&0x1) +#define DDR0_06_TWTR_MASK 0x00070000 +#define DDR0_06_TWTR_ENCODE(n) ((((unsigned long)(n))&0x7)<<16) +#define DDR0_06_TWTR_DECODE(n) ((((unsigned long)(n))>>16)&0x7) +#define DDR0_06_TDLL_MASK 0x0000FF00 +#define DDR0_06_TDLL_ENCODE(n) ((((unsigned long)(n))&0xFF)<<8) +#define DDR0_06_TDLL_DECODE(n) ((((unsigned long)(n))>>8)&0xFF) +#define DDR0_06_TRFC_MASK 0x0000007F +#define DDR0_06_TRFC_ENCODE(n) ((((unsigned long)(n))&0x7F)<<0) +#define DDR0_06_TRFC_DECODE(n) ((((unsigned long)(n))>>0)&0x7F) + +#define DDR0_07 0x07 +#define DDR0_07_NO_CMD_INIT_MASK 0x01000000 +#define DDR0_07_NO_CMD_INIT_ENCODE(n) ((((unsigned long)(n))&0x1)<<24) +#define DDR0_07_NO_CMD_INIT_DECODE(n) ((((unsigned long)(n))>>24)&0x1) +#define DDR0_07_TFAW_MASK 0x001F0000 +#define DDR0_07_TFAW_ENCODE(n) ((((unsigned long)(n))&0x1F)<<16) +#define DDR0_07_TFAW_DECODE(n) ((((unsigned long)(n))>>16)&0x1F) +#define DDR0_07_AUTO_REFRESH_MODE_MASK 0x00000100 +#define DDR0_07_AUTO_REFRESH_MODE_ENCODE(n) ((((unsigned long)(n))&0x1)<<8) +#define DDR0_07_AUTO_REFRESH_MODE_DECODE(n) ((((unsigned long)(n))>>8)&0x1) +#define DDR0_07_AREFRESH_MASK 0x00000001 +#define DDR0_07_AREFRESH_ENCODE(n) ((((unsigned long)(n))&0x1)<<0) +#define DDR0_07_AREFRESH_DECODE(n) ((((unsigned long)(n))>>0)&0x1) + +#define DDR0_08 0x08 +#define DDR0_08_WRLAT_MASK 0x07000000 +#define DDR0_08_WRLAT_ENCODE(n) ((((unsigned long)(n))&0x7)<<24) +#define DDR0_08_WRLAT_DECODE(n) ((((unsigned long)(n))>>24)&0x7) +#define DDR0_08_TCPD_MASK 0x00FF0000 +#define DDR0_08_TCPD_ENCODE(n) ((((unsigned long)(n))&0xFF)<<16) +#define DDR0_08_TCPD_DECODE(n) ((((unsigned long)(n))>>16)&0xFF) +#define DDR0_08_DQS_N_EN_MASK 0x00000100 +#define DDR0_08_DQS_N_EN_ENCODE(n) ((((unsigned long)(n))&0x1)<<8) +#define DDR0_08_DQS_N_EN_DECODE(n) ((((unsigned long)(n))>>8)&0x1) +#define DDR0_08_DDRII_SDRAM_MODE_MASK 0x00000001 +#define DDR0_08_DDRII_ENCODE(n) ((((unsigned long)(n))&0x1)<<0) +#define DDR0_08_DDRII_DECODE(n) ((((unsigned long)(n))>>0)&0x1) + +#define DDR0_09 0x09 +#define DDR0_09_OCD_ADJUST_PDN_CS_0_MASK 0x1F000000 +#define DDR0_09_OCD_ADJUST_PDN_CS_0_ENCODE(n) ((((unsigned long)(n))&0x1F)<<24) +#define DDR0_09_OCD_ADJUST_PDN_CS_0_DECODE(n) ((((unsigned long)(n))>>24)&0x1F) +#define DDR0_09_RTT_0_MASK 0x00030000 +#define DDR0_09_RTT_0_ENCODE(n) ((((unsigned long)(n))&0x3)<<16) +#define DDR0_09_RTT_0_DECODE(n) ((((unsigned long)(n))>>16)&0x3) +#define DDR0_09_WR_DQS_SHIFT_BYPASS_MASK 0x00007F00 +#define DDR0_09_WR_DQS_SHIFT_BYPASS_ENCODE(n) ((((unsigned long)(n))&0x7F)<<8) +#define DDR0_09_WR_DQS_SHIFT_BYPASS_DECODE(n) ((((unsigned long)(n))>>8)&0x7F) +#define DDR0_09_WR_DQS_SHIFT_MASK 0x0000007F +#define DDR0_09_WR_DQS_SHIFT_ENCODE(n) ((((unsigned long)(n))&0x7F)<<0) +#define DDR0_09_WR_DQS_SHIFT_DECODE(n) ((((unsigned long)(n))>>0)&0x7F) + +#define DDR0_10 0x0A +#define DDR0_10_WRITE_MODEREG_MASK 0x00010000 /* Write only */ +#define DDR0_10_WRITE_MODEREG_ENCODE(n) ((((unsigned long)(n))&0x1)<<16) +#define DDR0_10_WRITE_MODEREG_DECODE(n) ((((unsigned long)(n))>>16)&0x1) +#define DDR0_10_CS_MAP_MASK 0x00000300 +#define DDR0_10_CS_MAP_NO_MEM 0x00000000 +#define DDR0_10_CS_MAP_RANK0_INSTALLED 0x00000100 +#define DDR0_10_CS_MAP_RANK1_INSTALLED 0x00000200 +#define DDR0_10_CS_MAP_ENCODE(n) ((((unsigned long)(n))&0x3)<<8) +#define DDR0_10_CS_MAP_DECODE(n) ((((unsigned long)(n))>>8)&0x3) +#define DDR0_10_OCD_ADJUST_PUP_CS_0_MASK 0x0000001F +#define DDR0_10_OCD_ADJUST_PUP_CS_0_ENCODE(n) ((((unsigned long)(n))&0x1F)<<0) +#define DDR0_10_OCD_ADJUST_PUP_CS_0_DECODE(n) ((((unsigned long)(n))>>0)&0x1F) + +#define DDR0_11 0x0B +#define DDR0_11_SREFRESH_MASK 0x01000000 +#define DDR0_11_SREFRESH_ENCODE(n) ((((unsigned long)(n))&0x1)<<24) +#define DDR0_11_SREFRESH_DECODE(n) ((((unsigned long)(n))>>24)&0x1F) +#define DDR0_11_TXSNR_MASK 0x00FF0000 +#define DDR0_11_TXSNR_ENCODE(n) ((((unsigned long)(n))&0xFF)<<16) +#define DDR0_11_TXSNR_DECODE(n) ((((unsigned long)(n))>>16)&0xFF) +#define DDR0_11_TXSR_MASK 0x0000FF00 +#define DDR0_11_TXSR_ENCODE(n) ((((unsigned long)(n))&0xFF)<<8) +#define DDR0_11_TXSR_DECODE(n) ((((unsigned long)(n))>>8)&0xFF) + +#define DDR0_12 0x0C +#define DDR0_12_TCKE_MASK 0x0000007 +#define DDR0_12_TCKE_ENCODE(n) ((((unsigned long)(n))&0x7)<<0) +#define DDR0_12_TCKE_DECODE(n) ((((unsigned long)(n))>>0)&0x7) + +#define DDR0_13 0x0D + +#define DDR0_14 0x0E +#define DDR0_14_DLL_BYPASS_MODE_MASK 0x01000000 +#define DDR0_14_DLL_BYPASS_MODE_ENCODE(n) ((((unsigned long)(n))&0x1)<<24) +#define DDR0_14_DLL_BYPASS_MODE_DECODE(n) ((((unsigned long)(n))>>24)&0x1) +#define DDR0_14_REDUC_MASK 0x00010000 +#define DDR0_14_REDUC_64BITS 0x00000000 +#define DDR0_14_REDUC_32BITS 0x00010000 +#define DDR0_14_REDUC_ENCODE(n) ((((unsigned long)(n))&0x1)<<16) +#define DDR0_14_REDUC_DECODE(n) ((((unsigned long)(n))>>16)&0x1) +#define DDR0_14_REG_DIMM_ENABLE_MASK 0x00000100 +#define DDR0_14_REG_DIMM_ENABLE_ENCODE(n) ((((unsigned long)(n))&0x1)<<8) +#define DDR0_14_REG_DIMM_ENABLE_DECODE(n) ((((unsigned long)(n))>>8)&0x1) + +#define DDR0_15 0x0F + +#define DDR0_16 0x10 + +#define DDR0_17 0x11 +#define DDR0_17_DLL_DQS_DELAY_0_MASK 0x7F000000 +#define DDR0_17_DLL_DQS_DELAY_0_ENCODE(n) ((((unsigned long)(n))&0x7F)<<24) +#define DDR0_17_DLL_DQS_DELAY_0_DECODE(n) ((((unsigned long)(n))>>24)&0x7F) +#define DDR0_17_DLLLOCKREG_MASK 0x00010000 /* Read only */ +#define DDR0_17_DLLLOCKREG_LOCKED 0x00010000 +#define DDR0_17_DLLLOCKREG_UNLOCKED 0x00000000 +#define DDR0_17_DLLLOCKREG_ENCODE(n) ((((unsigned long)(n))&0x1)<<16) +#define DDR0_17_DLLLOCKREG_DECODE(n) ((((unsigned long)(n))>>16)&0x1) +#define DDR0_17_DLL_LOCK_MASK 0x00007F00 /* Read only */ +#define DDR0_17_DLL_LOCK_ENCODE(n) ((((unsigned long)(n))&0x7F)<<8) +#define DDR0_17_DLL_LOCK_DECODE(n) ((((unsigned long)(n))>>8)&0x7F) + +#define DDR0_18 0x12 +#define DDR0_18_DLL_DQS_DELAY_X_MASK 0x7F7F7F7F +#define DDR0_18_DLL_DQS_DELAY_4_MASK 0x7F000000 +#define DDR0_18_DLL_DQS_DELAY_4_ENCODE(n) ((((unsigned long)(n))&0x7F)<<24) +#define DDR0_18_DLL_DQS_DELAY_4_DECODE(n) ((((unsigned long)(n))>>24)&0x7F) +#define DDR0_18_DLL_DQS_DELAY_3_MASK 0x007F0000 +#define DDR0_18_DLL_DQS_DELAY_3_ENCODE(n) ((((unsigned long)(n))&0x7F)<<16) +#define DDR0_18_DLL_DQS_DELAY_3_DECODE(n) ((((unsigned long)(n))>>16)&0x7F) +#define DDR0_18_DLL_DQS_DELAY_2_MASK 0x00007F00 +#define DDR0_18_DLL_DQS_DELAY_2_ENCODE(n) ((((unsigned long)(n))&0x7F)<<8) +#define DDR0_18_DLL_DQS_DELAY_2_DECODE(n) ((((unsigned long)(n))>>8)&0x7F) +#define DDR0_18_DLL_DQS_DELAY_1_MASK 0x0000007F +#define DDR0_18_DLL_DQS_DELAY_1_ENCODE(n) ((((unsigned long)(n))&0x7F)<<0) +#define DDR0_18_DLL_DQS_DELAY_1_DECODE(n) ((((unsigned long)(n))>>0)&0x7F) + +#define DDR0_19 0x13 +#define DDR0_19_DLL_DQS_DELAY_X_MASK 0x7F7F7F7F +#define DDR0_19_DLL_DQS_DELAY_8_MASK 0x7F000000 +#define DDR0_19_DLL_DQS_DELAY_8_ENCODE(n) ((((unsigned long)(n))&0x7F)<<24) +#define DDR0_19_DLL_DQS_DELAY_8_DECODE(n) ((((unsigned long)(n))>>24)&0x7F) +#define DDR0_19_DLL_DQS_DELAY_7_MASK 0x007F0000 +#define DDR0_19_DLL_DQS_DELAY_7_ENCODE(n) ((((unsigned long)(n))&0x7F)<<16) +#define DDR0_19_DLL_DQS_DELAY_7_DECODE(n) ((((unsigned long)(n))>>16)&0x7F) +#define DDR0_19_DLL_DQS_DELAY_6_MASK 0x00007F00 +#define DDR0_19_DLL_DQS_DELAY_6_ENCODE(n) ((((unsigned long)(n))&0x7F)<<8) +#define DDR0_19_DLL_DQS_DELAY_6_DECODE(n) ((((unsigned long)(n))>>8)&0x7F) +#define DDR0_19_DLL_DQS_DELAY_5_MASK 0x0000007F +#define DDR0_19_DLL_DQS_DELAY_5_ENCODE(n) ((((unsigned long)(n))&0x7F)<<0) +#define DDR0_19_DLL_DQS_DELAY_5_DECODE(n) ((((unsigned long)(n))>>0)&0x7F) + +#define DDR0_20 0x14 +#define DDR0_20_DLL_DQS_BYPASS_3_MASK 0x7F000000 +#define DDR0_20_DLL_DQS_BYPASS_3_ENCODE(n) ((((unsigned long)(n))&0x7F)<<24) +#define DDR0_20_DLL_DQS_BYPASS_3_DECODE(n) ((((unsigned long)(n))>>24)&0x7F) +#define DDR0_20_DLL_DQS_BYPASS_2_MASK 0x007F0000 +#define DDR0_20_DLL_DQS_BYPASS_2_ENCODE(n) ((((unsigned long)(n))&0x7F)<<16) +#define DDR0_20_DLL_DQS_BYPASS_2_DECODE(n) ((((unsigned long)(n))>>16)&0x7F) +#define DDR0_20_DLL_DQS_BYPASS_1_MASK 0x00007F00 +#define DDR0_20_DLL_DQS_BYPASS_1_ENCODE(n) ((((unsigned long)(n))&0x7F)<<8) +#define DDR0_20_DLL_DQS_BYPASS_1_DECODE(n) ((((unsigned long)(n))>>8)&0x7F) +#define DDR0_20_DLL_DQS_BYPASS_0_MASK 0x0000007F +#define DDR0_20_DLL_DQS_BYPASS_0_ENCODE(n) ((((unsigned long)(n))&0x7F)<<0) +#define DDR0_20_DLL_DQS_BYPASS_0_DECODE(n) ((((unsigned long)(n))>>0)&0x7F) + +#define DDR0_21 0x15 +#define DDR0_21_DLL_DQS_BYPASS_7_MASK 0x7F000000 +#define DDR0_21_DLL_DQS_BYPASS_7_ENCODE(n) ((((unsigned long)(n))&0x7F)<<24) +#define DDR0_21_DLL_DQS_BYPASS_7_DECODE(n) ((((unsigned long)(n))>>24)&0x7F) +#define DDR0_21_DLL_DQS_BYPASS_6_MASK 0x007F0000 +#define DDR0_21_DLL_DQS_BYPASS_6_ENCODE(n) ((((unsigned long)(n))&0x7F)<<16) +#define DDR0_21_DLL_DQS_BYPASS_6_DECODE(n) ((((unsigned long)(n))>>16)&0x7F) +#define DDR0_21_DLL_DQS_BYPASS_5_MASK 0x00007F00 +#define DDR0_21_DLL_DQS_BYPASS_5_ENCODE(n) ((((unsigned long)(n))&0x7F)<<8) +#define DDR0_21_DLL_DQS_BYPASS_5_DECODE(n) ((((unsigned long)(n))>>8)&0x7F) +#define DDR0_21_DLL_DQS_BYPASS_4_MASK 0x0000007F +#define DDR0_21_DLL_DQS_BYPASS_4_ENCODE(n) ((((unsigned long)(n))&0x7F)<<0) +#define DDR0_21_DLL_DQS_BYPASS_4_DECODE(n) ((((unsigned long)(n))>>0)&0x7F) + +#define DDR0_22 0x16 +/* ECC */ +#define DDR0_22_CTRL_RAW_MASK 0x03000000 +#define DDR0_22_CTRL_RAW_ECC_DISABLE 0x00000000 /* ECC not being used */ +#define DDR0_22_CTRL_RAW_ECC_CHECK_ONLY 0x01000000 /* ECC checking is on, but no attempts to correct*/ +#define DDR0_22_CTRL_RAW_NO_ECC_RAM 0x02000000 /* No ECC RAM storage available */ +#define DDR0_22_CTRL_RAW_ECC_ENABLE 0x03000000 /* ECC checking and correcting on */ +#define DDR0_22_CTRL_RAW_ENCODE(n) ((((unsigned long)(n))&0x3)<<24) +#define DDR0_22_CTRL_RAW_DECODE(n) ((((unsigned long)(n))>>24)&0x3) + +#define DDR0_22_DQS_OUT_SHIFT_BYPASS_MASK 0x007F0000 +#define DDR0_22_DQS_OUT_SHIFT_BYPASS_ENCODE(n) ((((unsigned long)(n))&0x7F)<<16) +#define DDR0_22_DQS_OUT_SHIFT_BYPASS_DECODE(n) ((((unsigned long)(n))>>16)&0x7F) +#define DDR0_22_DQS_OUT_SHIFT_MASK 0x00007F00 +#define DDR0_22_DQS_OUT_SHIFT_ENCODE(n) ((((unsigned long)(n))&0x7F)<<8) +#define DDR0_22_DQS_OUT_SHIFT_DECODE(n) ((((unsigned long)(n))>>8)&0x7F) +#define DDR0_22_DLL_DQS_BYPASS_8_MASK 0x0000007F +#define DDR0_22_DLL_DQS_BYPASS_8_ENCODE(n) ((((unsigned long)(n))&0x7F)<<0) +#define DDR0_22_DLL_DQS_BYPASS_8_DECODE(n) ((((unsigned long)(n))>>0)&0x7F) + + + + +#define DDR0_23 0x17 +#define DDR0_23_ODT_RD_MAP_CS0_MASK 0x03000000 +#define DDR0_23_ODT_RD_MAP_CS0_ENCODE(n) ((((unsigned long)(n))&0x3)<<24) +#define DDR0_23_ODT_RD_MAP_CS0_DECODE(n) ((((unsigned long)(n))>>24)&0x3) +#define DDR0_23_ECC_C_SYND_MASK 0x00FF0000 /* Read only */ +#define DDR0_23_ECC_C_SYND_ENCODE(n) ((((unsigned long)(n))&0xFF)<<16) +#define DDR0_23_ECC_C_SYND_DECODE(n) ((((unsigned long)(n))>>16)&0xFF) +#define DDR0_23_ECC_U_SYND_MASK 0x0000FF00 /* Read only */ +#define DDR0_23_ECC_U_SYND_ENCODE(n) ((((unsigned long)(n))&0xFF)<<8) +#define DDR0_23_ECC_U_SYND_DECODE(n) ((((unsigned long)(n))>>8)&0xFF) +#define DDR0_23_FWC_MASK 0x00000001 /* Write only */ +#define DDR0_23_FWC_ENCODE(n) ((((unsigned long)(n))&0x1)<<0) +#define DDR0_23_FWC_DECODE(n) ((((unsigned long)(n))>>0)&0x1) + +#define DDR0_24 0x18 +#define DDR0_24_RTT_PAD_TERMINATION_MASK 0x03000000 +#define DDR0_24_RTT_PAD_TERMINATION_ENCODE(n) ((((unsigned long)(n))&0x3)<<24) +#define DDR0_24_RTT_PAD_TERMINATION_DECODE(n) ((((unsigned long)(n))>>24)&0x3) +#define DDR0_24_ODT_WR_MAP_CS1_MASK 0x00030000 +#define DDR0_24_ODT_WR_MAP_CS1_ENCODE(n) ((((unsigned long)(n))&0x3)<<16) +#define DDR0_24_ODT_WR_MAP_CS1_DECODE(n) ((((unsigned long)(n))>>16)&0x3) +#define DDR0_24_ODT_RD_MAP_CS1_MASK 0x00000300 +#define DDR0_24_ODT_RD_MAP_CS1_ENCODE(n) ((((unsigned long)(n))&0x3)<<8) +#define DDR0_24_ODT_RD_MAP_CS1_DECODE(n) ((((unsigned long)(n))>>8)&0x3) +#define DDR0_24_ODT_WR_MAP_CS0_MASK 0x00000003 +#define DDR0_24_ODT_WR_MAP_CS0_ENCODE(n) ((((unsigned long)(n))&0x3)<<0) +#define DDR0_24_ODT_WR_MAP_CS0_DECODE(n) ((((unsigned long)(n))>>0)&0x3) + +#define DDR0_25 0x19 +#define DDR0_25_VERSION_MASK 0xFFFF0000 /* Read only */ +#define DDR0_25_VERSION_ENCODE(n) ((((unsigned long)(n))&0xFFFF)<<16) +#define DDR0_25_VERSION_DECODE(n) ((((unsigned long)(n))>>16)&0xFFFF) +#define DDR0_25_OUT_OF_RANGE_LENGTH_MASK 0x000003FF /* Read only */ +#define DDR0_25_OUT_OF_RANGE_LENGTH_ENCODE(n) ((((unsigned long)(n))&0x3FF)<<0) +#define DDR0_25_OUT_OF_RANGE_LENGTH_DECODE(n) ((((unsigned long)(n))>>0)&0x3FF) + +#define DDR0_26 0x1A +#define DDR0_26_TRAS_MAX_MASK 0xFFFF0000 +#define DDR0_26_TRAS_MAX_ENCODE(n) ((((unsigned long)(n))&0xFFFF)<<16) +#define DDR0_26_TRAS_MAX_DECODE(n) ((((unsigned long)(n))>>16)&0xFFFF) +#define DDR0_26_TREF_MASK 0x00003FFF +#define DDR0_26_TREF_ENCODE(n) ((((unsigned long)(n))&0x3FF)<<0) +#define DDR0_26_TREF_DECODE(n) ((((unsigned long)(n))>>0)&0x3FF) + +#define DDR0_27 0x1B +#define DDR0_27_EMRS_DATA_MASK 0x3FFF0000 +#define DDR0_27_EMRS_DATA_ENCODE(n) ((((unsigned long)(n))&0x3FFF)<<16) +#define DDR0_27_EMRS_DATA_DECODE(n) ((((unsigned long)(n))>>16)&0x3FFF) +#define DDR0_27_TINIT_MASK 0x0000FFFF +#define DDR0_27_TINIT_ENCODE(n) ((((unsigned long)(n))&0xFFFF)<<0) +#define DDR0_27_TINIT_DECODE(n) ((((unsigned long)(n))>>0)&0xFFFF) + +#define DDR0_28 0x1C +#define DDR0_28_EMRS3_DATA_MASK 0x3FFF0000 +#define DDR0_28_EMRS3_DATA_ENCODE(n) ((((unsigned long)(n))&0x3FFF)<<16) +#define DDR0_28_EMRS3_DATA_DECODE(n) ((((unsigned long)(n))>>16)&0x3FFF) +#define DDR0_28_EMRS2_DATA_MASK 0x00003FFF +#define DDR0_28_EMRS2_DATA_ENCODE(n) ((((unsigned long)(n))&0x3FFF)<<0) +#define DDR0_28_EMRS2_DATA_DECODE(n) ((((unsigned long)(n))>>0)&0x3FFF) + +#define DDR0_29 0x1D + +#define DDR0_30 0x1E + +#define DDR0_31 0x1F +#define DDR0_31_XOR_CHECK_BITS_MASK 0x0000FFFF +#define DDR0_31_XOR_CHECK_BITS_ENCODE(n) ((((unsigned long)(n))&0xFFFF)<<0) +#define DDR0_31_XOR_CHECK_BITS_DECODE(n) ((((unsigned long)(n))>>0)&0xFFFF) + +#define DDR0_32 0x20 +#define DDR0_32_OUT_OF_RANGE_ADDR_MASK 0xFFFFFFFF /* Read only */ +#define DDR0_32_OUT_OF_RANGE_ADDR_ENCODE(n) ((((unsigned long)(n))&0xFFFFFFFF)<<0) +#define DDR0_32_OUT_OF_RANGE_ADDR_DECODE(n) ((((unsigned long)(n))>>0)&0xFFFFFFFF) + +#define DDR0_33 0x21 +#define DDR0_33_OUT_OF_RANGE_ADDR_MASK 0x00000001 /* Read only */ +#define DDR0_33_OUT_OF_RANGE_ADDR_ENCODE(n) ((((unsigned long)(n))&0x1)<<0) +#define DDR0_33_OUT_OF_RANGE_ADDR_DECODE(n) ((((unsigned long)(n))>>0)&0x1) + +#define DDR0_34 0x22 +#define DDR0_34_ECC_U_ADDR_MASK 0xFFFFFFFF /* Read only */ +#define DDR0_34_ECC_U_ADDR_ENCODE(n) ((((unsigned long)(n))&0xFFFFFFFF)<<0) +#define DDR0_34_ECC_U_ADDR_DECODE(n) ((((unsigned long)(n))>>0)&0xFFFFFFFF) + +#define DDR0_35 0x23 +#define DDR0_35_ECC_U_ADDR_MASK 0x00000001 /* Read only */ +#define DDR0_35_ECC_U_ADDR_ENCODE(n) ((((unsigned long)(n))&0x1)<<0) +#define DDR0_35_ECC_U_ADDR_DECODE(n) ((((unsigned long)(n))>>0)&0x1) + +#define DDR0_36 0x24 +#define DDR0_36_ECC_U_DATA_MASK 0xFFFFFFFF /* Read only */ +#define DDR0_36_ECC_U_DATA_ENCODE(n) ((((unsigned long)(n))&0xFFFFFFFF)<<0) +#define DDR0_36_ECC_U_DATA_DECODE(n) ((((unsigned long)(n))>>0)&0xFFFFFFFF) + +#define DDR0_37 0x25 +#define DDR0_37_ECC_U_DATA_MASK 0xFFFFFFFF /* Read only */ +#define DDR0_37_ECC_U_DATA_ENCODE(n) ((((unsigned long)(n))&0xFFFFFFFF)<<0) +#define DDR0_37_ECC_U_DATA_DECODE(n) ((((unsigned long)(n))>>0)&0xFFFFFFFF) + +#define DDR0_38 0x26 +#define DDR0_38_ECC_C_ADDR_MASK 0xFFFFFFFF /* Read only */ +#define DDR0_38_ECC_C_ADDR_ENCODE(n) ((((unsigned long)(n))&0xFFFFFFFF)<<0) +#define DDR0_38_ECC_C_ADDR_DECODE(n) ((((unsigned long)(n))>>0)&0xFFFFFFFF) + +#define DDR0_39 0x27 +#define DDR0_39_ECC_C_ADDR_MASK 0x00000001 /* Read only */ +#define DDR0_39_ECC_C_ADDR_ENCODE(n) ((((unsigned long)(n))&0x1)<<0) +#define DDR0_39_ECC_C_ADDR_DECODE(n) ((((unsigned long)(n))>>0)&0x1) + +#define DDR0_40 0x28 +#define DDR0_40_ECC_C_DATA_MASK 0xFFFFFFFF /* Read only */ +#define DDR0_40_ECC_C_DATA_ENCODE(n) ((((unsigned long)(n))&0xFFFFFFFF)<<0) +#define DDR0_40_ECC_C_DATA_DECODE(n) ((((unsigned long)(n))>>0)&0xFFFFFFFF) + +#define DDR0_41 0x29 +#define DDR0_41_ECC_C_DATA_MASK 0xFFFFFFFF /* Read only */ +#define DDR0_41_ECC_C_DATA_ENCODE(n) ((((unsigned long)(n))&0xFFFFFFFF)<<0) +#define DDR0_41_ECC_C_DATA_DECODE(n) ((((unsigned long)(n))>>0)&0xFFFFFFFF) + +#define DDR0_42 0x2A +#define DDR0_42_ADDR_PINS_MASK 0x07000000 +#define DDR0_42_ADDR_PINS_ENCODE(n) ((((unsigned long)(n))&0x7)<<24) +#define DDR0_42_ADDR_PINS_DECODE(n) ((((unsigned long)(n))>>24)&0x7) +#define DDR0_42_CASLAT_LIN_GATE_MASK 0x0000000F +#define DDR0_42_CASLAT_LIN_GATE_ENCODE(n) ((((unsigned long)(n))&0xF)<<0) +#define DDR0_42_CASLAT_LIN_GATE_DECODE(n) ((((unsigned long)(n))>>0)&0xF) + +#define DDR0_43 0x2B +#define DDR0_43_TWR_MASK 0x07000000 +#define DDR0_43_TWR_ENCODE(n) ((((unsigned long)(n))&0x7)<<24) +#define DDR0_43_TWR_DECODE(n) ((((unsigned long)(n))>>24)&0x7) +#define DDR0_43_APREBIT_MASK 0x000F0000 +#define DDR0_43_APREBIT_ENCODE(n) ((((unsigned long)(n))&0xF)<<16) +#define DDR0_43_APREBIT_DECODE(n) ((((unsigned long)(n))>>16)&0xF) +#define DDR0_43_COLUMN_SIZE_MASK 0x00000700 +#define DDR0_43_COLUMN_SIZE_ENCODE(n) ((((unsigned long)(n))&0x7)<<8) +#define DDR0_43_COLUMN_SIZE_DECODE(n) ((((unsigned long)(n))>>8)&0x7) +#define DDR0_43_EIGHT_BANK_MODE_MASK 0x00000001 +#define DDR0_43_EIGHT_BANK_MODE_8_BANKS 0x00000001 +#define DDR0_43_EIGHT_BANK_MODE_4_BANKS 0x00000000 +#define DDR0_43_EIGHT_BANK_MODE_ENCODE(n) ((((unsigned long)(n))&0x1)<<0) +#define DDR0_43_EIGHT_BANK_MODE_DECODE(n) ((((unsigned long)(n))>>0)&0x1) + +#define DDR0_44 0x2C +#define DDR0_44_TRCD_MASK 0x000000FF +#define DDR0_44_TRCD_ENCODE(n) ((((unsigned long)(n))&0xFF)<<0) +#define DDR0_44_TRCD_DECODE(n) ((((unsigned long)(n))>>0)&0xFF) + +#endif /* _SPD_SDRAM_DENALI_H_ */ diff --git a/cpu/ppc4xx/cpu_init.c b/cpu/ppc4xx/cpu_init.c index 4b746b072ee..db0559b04d2 100644 --- a/cpu/ppc4xx/cpu_init.c +++ b/cpu/ppc4xx/cpu_init.c @@ -31,9 +31,6 @@ DECLARE_GLOBAL_DATA_PTR; #endif - -#define mtebc(reg, data) mtdcr(ebccfga,reg);mtdcr(ebccfgd,data) - #ifdef CFG_INIT_DCACHE_CS # if (CFG_INIT_DCACHE_CS == 0) # define PBxAP pb0ap diff --git a/include/configs/sequoia.h b/include/configs/sequoia.h index 00b92220c10..e7f0108892c 100644 --- a/include/configs/sequoia.h +++ b/include/configs/sequoia.h @@ -188,7 +188,10 @@ /*----------------------------------------------------------------------- * DDR SDRAM *----------------------------------------------------------------------*/ -#define CFG_MBYTES_SDRAM (256) /* 256MB */ +#define CFG_MBYTES_SDRAM (256) /* 256MB */ +#if !defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL) +#define CONFIG_DDR_DATA_EYE /* use DDR2 optimization */ +#endif /*----------------------------------------------------------------------- * I2C diff --git a/nand_spl/board/amcc/sequoia/Makefile b/nand_spl/board/amcc/sequoia/Makefile index a71f583eddb..b42da8cf682 100644 --- a/nand_spl/board/amcc/sequoia/Makefile +++ b/nand_spl/board/amcc/sequoia/Makefile @@ -76,7 +76,9 @@ $(obj)init.S: $(obj)sdram.c: @rm -f $(obj)sdram.c + @rm -f $(obj)sdram.h ln -s $(SRCTREE)/board/amcc/sequoia/sdram.c $(obj)sdram.c + ln -s $(SRCTREE)/board/amcc/sequoia/sdram.h $(obj)sdram.h # from nand_spl directory $(obj)nand_boot.c: -- cgit v1.3.1 From a78bc443ae5a4a8ba87590587d5e35bf5a787b2e Mon Sep 17 00:00:00 2001 From: Stefan Roese Date: Fri, 5 Jan 2007 10:40:36 +0100 Subject: [PATCH] Clear PLB4A0_ACR[WRP] on Sequoia (440EPx) This fix will make the MAL burst disabling patch for the Linux EMAC driver obsolete. Signed-off-by: Stefan Roese --- board/amcc/sequoia/sequoia.c | 15 ++++++++++++--- include/ppc440.h | 20 +++++++++++--------- 2 files changed, 23 insertions(+), 12 deletions(-) (limited to 'include') diff --git a/board/amcc/sequoia/sequoia.c b/board/amcc/sequoia/sequoia.c index ff211aef2d7..703204f0505 100644 --- a/board/amcc/sequoia/sequoia.c +++ b/board/amcc/sequoia/sequoia.c @@ -35,9 +35,9 @@ ulong flash_get_size (ulong base, int banknum); int board_early_init_f(void) { - unsigned long sdr0_cust0; - unsigned long sdr0_pfc1, sdr0_pfc2; - register uint reg; + u32 sdr0_cust0; + u32 sdr0_pfc1, sdr0_pfc2; + u32 reg; mtdcr(ebccfga, xbcfg); mtdcr(ebccfgd, 0xb8400000); @@ -142,6 +142,7 @@ int misc_init_r(void) { uint pbcr; int size_val = 0; + u32 reg; #ifdef CONFIG_440EPX unsigned long usb2d0cr = 0; unsigned long usb2phy0cr, usb2h0cr = 0; @@ -335,6 +336,14 @@ int misc_init_r(void) } #endif /* CONFIG_440EPX */ + /* + * Clear PLB4A0_ACR[WRP] + * This fix will make the MAL burst disabling patch for the Linux + * EMAC driver obsolete. + */ + reg = mfdcr(plb4_acr) & ~PLB4_ACR_WRP; + mtdcr(plb4_acr, reg); + return 0; } diff --git a/include/ppc440.h b/include/ppc440.h index 50f4ec403bd..91cff414af6 100644 --- a/include/ppc440.h +++ b/include/ppc440.h @@ -887,12 +887,14 @@ /* PLB4 Arbiter - PowerPC440EP Pass1 */ #define PLB4_DCR_BASE 0x080 +#define plb4_acr (PLB4_DCR_BASE+0x1) #define plb4_revid (PLB4_DCR_BASE+0x2) -#define plb4_acr (PLB4_DCR_BASE+0x3) #define plb4_besr (PLB4_DCR_BASE+0x4) #define plb4_bearl (PLB4_DCR_BASE+0x6) #define plb4_bearh (PLB4_DCR_BASE+0x7) +#define PLB4_ACR_WRP (0x80000000 >> 7) + /* Nebula PLB4 Arbiter - PowerPC440EP */ #define PLB_ARBITER_BASE 0x80 @@ -3284,26 +3286,26 @@ typedef struct { unsigned long add; /* gpio core base address */ /* * Macros for accessing the indirect EBC registers */ -#define mtebc(reg, data) mtdcr(ebccfga,reg);mtdcr(ebccfgd,data) -#define mfebc(reg, data) mtdcr(ebccfga,reg);data = mfdcr(ebccfgd) +#define mtebc(reg, data) { mtdcr(ebccfga,reg);mtdcr(ebccfgd,data); } +#define mfebc(reg, data) { mtdcr(ebccfga,reg);data = mfdcr(ebccfgd); } /* * Macros for accessing the indirect SDRAM controller registers */ -#define mtsdram(reg, data) mtdcr(memcfga,reg);mtdcr(memcfgd,data) -#define mfsdram(reg, data) mtdcr(memcfga,reg);data = mfdcr(memcfgd) +#define mtsdram(reg, data) { mtdcr(memcfga,reg);mtdcr(memcfgd,data); } +#define mfsdram(reg, data) { mtdcr(memcfga,reg);data = mfdcr(memcfgd); } /* * Macros for accessing the indirect clocking controller registers */ -#define mtclk(reg, data) mtdcr(clkcfga,reg);mtdcr(clkcfgd,data) -#define mfclk(reg, data) mtdcr(clkcfga,reg);data = mfdcr(clkcfgd) +#define mtclk(reg, data) { mtdcr(clkcfga,reg);mtdcr(clkcfgd,data); } +#define mfclk(reg, data) { mtdcr(clkcfga,reg);data = mfdcr(clkcfgd); } /* * Macros for accessing the sdr controller registers */ -#define mtsdr(reg, data) mtdcr(sdrcfga,reg);mtdcr(sdrcfgd,data) -#define mfsdr(reg, data) mtdcr(sdrcfga,reg);data = mfdcr(sdrcfgd) +#define mtsdr(reg, data) { mtdcr(sdrcfga,reg);mtdcr(sdrcfgd,data); } +#define mfsdr(reg, data) { mtdcr(sdrcfga,reg);data = mfdcr(sdrcfgd); } #ifndef __ASSEMBLY__ -- cgit v1.3.1 From f16c1da9577f06c5fc08651a4065537407de4635 Mon Sep 17 00:00:00 2001 From: Stefan Roese Date: Sat, 6 Jan 2007 15:56:13 +0100 Subject: [PATCH] Update ALPR board files This update brings the ALPR board support to the newest version. It also fixes a problem with the NAND driver. Signed-off-by: Stefan Roese --- board/prodrive/alpr/alpr.c | 27 ++++++++------------------- board/prodrive/alpr/nand.c | 4 +++- include/configs/alpr.h | 19 ++++++++++++++++++- 3 files changed, 29 insertions(+), 21 deletions(-) (limited to 'include') diff --git a/board/prodrive/alpr/alpr.c b/board/prodrive/alpr/alpr.c index 2389561271a..5abc87dde64 100644 --- a/board/prodrive/alpr/alpr.c +++ b/board/prodrive/alpr/alpr.c @@ -77,8 +77,12 @@ int board_early_init_f (void) mtdcr (uicb0tr, 0x00000000); /* */ mtdcr (uicb0vr, 0x00000001); /* */ + /* Setup shutdown/SSD empty interrupt as inputs */ + out32(GPIO0_TCR, in32(GPIO0_TCR) & ~(CFG_GPIO_SHUTDOWN | CFG_GPIO_SSD_EMPTY)); + out32(GPIO0_ODR, in32(GPIO0_ODR) & ~(CFG_GPIO_SHUTDOWN | CFG_GPIO_SSD_EMPTY)); + /* Setup GPIO/IRQ multiplexing */ - mtsdr(sdr_pfc0, 0x01a03e00); + mtsdr(sdr_pfc0, 0x01a33e00); return 0; } @@ -105,26 +109,11 @@ int last_stage_init(void) static int board_rev(void) { - int rev; - u32 pfc0; - - /* Setup GPIO14 & 15 as GPIO */ - mfsdr(sdr_pfc0, pfc0); - pfc0 |= CFG_GPIO_REV0 | CFG_GPIO_REV1; - mtsdr(sdr_pfc0, pfc0); - /* Setup as input */ - out32(GPIO0_TCR, in32(GPIO0_TCR) & ~(CFG_GPIO_REV0 | CFG_GPIO_REV0)); - out32(GPIO0_ODR, in32(GPIO0_ODR) & ~(CFG_GPIO_REV0 | CFG_GPIO_REV0)); - - rev = (in32(GPIO0_IR) >> 16) & 0x3; - - /* Setup GPIO14 & 15 as non GPIO again */ - mfsdr(sdr_pfc0, pfc0); - pfc0 &= ~(CFG_GPIO_REV0 | CFG_GPIO_REV1); - mtsdr(sdr_pfc0, pfc0); + out32(GPIO0_TCR, in32(GPIO0_TCR) & ~(CFG_GPIO_REV0 | CFG_GPIO_REV1)); + out32(GPIO0_ODR, in32(GPIO0_ODR) & ~(CFG_GPIO_REV0 | CFG_GPIO_REV1)); - return rev; + return (in32(GPIO0_IR) >> 16) & 0x3; } int checkboard (void) diff --git a/board/prodrive/alpr/nand.c b/board/prodrive/alpr/nand.c index e63c921eff5..d66b08847a5 100644 --- a/board/prodrive/alpr/nand.c +++ b/board/prodrive/alpr/nand.c @@ -154,7 +154,7 @@ static int alpr_nand_dev_ready(struct mtd_info *mtd) return 1; } -void board_nand_init(struct nand_chip *nand) +int board_nand_init(struct nand_chip *nand) { alpr_ndfc = (struct alpr_ndfc_regs *)CFG_NAND_BASE; @@ -169,5 +169,7 @@ void board_nand_init(struct nand_chip *nand) nand->read_buf = alpr_nand_read_buf; nand->verify_buf = alpr_nand_verify_buf; nand->dev_ready = alpr_nand_dev_ready; + + return 0; } #endif diff --git a/include/configs/alpr.h b/include/configs/alpr.h index bbe6b76bff5..49027da5a49 100644 --- a/include/configs/alpr.h +++ b/include/configs/alpr.h @@ -166,8 +166,23 @@ "cp.b 100000 fffc0000 40000;" \ "setenv filesize;saveenv\0" \ "upd=run load;run update\0" \ + "ethprime=ppc_4xx_eth3\0" \ + "ethact=ppc_4xx_eth3\0" \ + "autoload=no\0" \ + "ipconfig=dhcp;setenv serverip 11.0.0.152\0" \ + "actkernel=kernel2\0" \ + "load_fpga=fpga load 0 ffe00000 10dd9a\0" \ + "mtdargs=setenv bootargs root=/dev/mtdblock6 rw " \ + "rootfstype=jffs2 init=/sbin/init\0" \ + "kernel1_mtd=nand read 200000 0 200000;run mtdargs addip addtty"\ + ";bootm 200000\0" \ + "kernel2_mtd=nand read 200000 200000 200000;run mtdargs addip " \ + "addtty;bootm 200000\0" \ + "kernel1=run ipconfig load_fpga kernel1_mtd\0" \ + "kernel2=run ipconfig load_fpga kernel2_mtd\0" \ "" -#define CONFIG_BOOTCOMMAND "run flash_self" + +#define CONFIG_BOOTCOMMAND "run kernel2" #define CONFIG_BOOTDELAY 2 /* autoboot after 5 seconds */ @@ -291,6 +306,8 @@ /*----------------------------------------------------------------------- * Definitions for GPIO setup *-----------------------------------------------------------------------*/ +#define CFG_GPIO_SHUTDOWN (0x80000000 >> 6) +#define CFG_GPIO_SSD_EMPTY (0x80000000 >> 9) #define CFG_GPIO_EREADY (0x80000000 >> 26) #define CFG_GPIO_REV0 (0x80000000 >> 14) #define CFG_GPIO_REV1 (0x80000000 >> 15) -- cgit v1.3.1 From d28707dbce1e9ac2017ad051da4133bf22b4204f Mon Sep 17 00:00:00 2001 From: Markus Klotzbuecher Date: Tue, 9 Jan 2007 14:57:10 +0100 Subject: Add support for the tms320671x host port interface (HPI) --- board/spc1920/Makefile | 2 +- board/spc1920/hpi.c | 604 ++++++++++++++++++++++++++++++++++++++++++++++ board/spc1920/hpi.h | 28 +++ board/spc1920/spc1920.c | 12 +- include/configs/spc1920.h | 34 +++ 5 files changed, 678 insertions(+), 2 deletions(-) create mode 100644 board/spc1920/hpi.c create mode 100644 board/spc1920/hpi.h (limited to 'include') diff --git a/board/spc1920/Makefile b/board/spc1920/Makefile index 424ab1cf9e3..0c48c3aeecc 100644 --- a/board/spc1920/Makefile +++ b/board/spc1920/Makefile @@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk LIB = $(obj)lib$(BOARD).a -COBJS = $(BOARD).o +COBJS = $(BOARD).o hpi.o SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) OBJS := $(addprefix $(obj),$(COBJS)) diff --git a/board/spc1920/hpi.c b/board/spc1920/hpi.c new file mode 100644 index 00000000000..687c170a850 --- /dev/null +++ b/board/spc1920/hpi.c @@ -0,0 +1,604 @@ +/* + * (C) Copyright 2006 + * Markus Klotzbuecher, DENX Software Engineering, mk@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 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 + */ + +/* + * Host Port Interface (HPI) + */ + +/* debug levels: + * 0 : errors + * 1 : usefull info + * 2 : lots of info + * 3 : noisy + */ + +#define DEBUG 0 + +#include +#include +#include + +#include "pld.h" +#include "hpi.h" +#include "spc1920.h" /* led function */ + +#define _NOT_USED_ 0xFFFFFFFF + +/* original table: + * - inserted loops to achieve long CS low and high Periods (~217ns) + * - move cs high 2/4 to the right + */ +const uint dsp_table_slow[] = +{ + /* single read (offset 0x00 in upm ram) */ + 0x8fffdc04, 0x0fffdc84, 0x0fffdc84, 0x0fffdc00, + 0x3fffdc04, 0xffffdc84, 0xffffdc84, 0xffffdc05, + + /* burst read (offset 0x08 in upm ram) */ + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + + /* single write (offset 0x18 in upm ram) */ + 0x8fffd004, 0x0fffd084, 0x0fffd084, 0x3fffd000, + 0xffffd084, 0xffffd084, 0xffffd005, _NOT_USED_, + + /* burst write (offset 0x20 in upm ram) */ + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + /* refresh (offset 0x30 in upm ram) */ + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + /* exception (offset 0x3C in upm ram) */ + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, +}; + +/* dsp hpi upm ram table + * works fine for noninc access, failes on incremental. + * - removed first word + */ +const uint dsp_table_fast[] = +{ + /* single read (offset 0x00 in upm ram) */ + 0x8fffdc04, 0x0fffdc04, 0x0fffdc00, 0x3fffdc04, + 0xffffdc05, _NOT_USED_, _NOT_USED_, _NOT_USED_, + + /* burst read (offset 0x08 in upm ram) */ + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + + /* single write (offset 0x18 in upm ram) */ + 0x8fffd004, 0x0fffd004, 0x3fffd000, 0xffffd005, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + + /* burst write (offset 0x20 in upm ram) */ + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + /* refresh (offset 0x30 in upm ram) */ + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, + /* exception (offset 0x3C in upm ram) */ + _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, +}; + + +#ifdef CONFIG_SPC1920_HPI_TEST +#undef HPI_TEST_OSZI + +#define HPI_TEST_CHUNKSIZE 0x1000 +#define HPI_TEST_PATTERN 0x00000000 +#define HPI_TEST_START 0x0 +#define HPI_TEST_END 0x30000 + +#define TINY_AUTOINC_DATA_SIZE 16 /* 32bit words */ +#define TINY_AUTOINC_BASE_ADDR 0x0 + +static int hpi_activate(void); +static void hpi_inactivate(void); +static void dsp_reset(void); + +static int hpi_write_inc(u32 addr, u32 *data, u32 count); +static int hpi_read_inc(u32 addr, u32 *buf, u32 count); +static int hpi_write_noinc(u32 addr, u32 data); +static u32 hpi_read_noinc(u32 addr); + +int hpi_test(void); +static int hpi_write_addr_test(u32 addr); +static int hpi_read_write_test(u32 addr, u32 data); +static int hpi_tiny_autoinc_test(void); +#endif /* CONFIG_SPC1920_HPI_TEST */ + + +/* init the host port interface on UPMA */ +int hpi_init(void) +{ + volatile immap_t *immr = (immap_t *) CFG_IMMR; + volatile memctl8xx_t *memctl = &immr->im_memctl; + volatile spc1920_pld_t *pld = (spc1920_pld_t *) CFG_SPC1920_PLD_BASE; + + upmconfig(UPMA, (uint *)dsp_table_slow, sizeof(dsp_table_slow)/sizeof(uint)); + udelay(100); + + memctl->memc_mamr = CFG_MAMR; + memctl->memc_or3 = CFG_OR3_PRELIM; + memctl->memc_br3 = CFG_BR3_PRELIM; + + /* reset dsp */ + dsp_reset(); + + /* activate hpi switch*/ + pld->dsp_hpi_on = 0x1; + + udelay(100); + + return 0; +} + +#ifdef CONFIG_SPC1920_HPI_TEST +/* activate the Host Port interface */ +static int hpi_activate(void) +{ + volatile spc1920_pld_t *pld = (spc1920_pld_t *) CFG_SPC1920_PLD_BASE; + + /* turn on hpi */ + pld->dsp_hpi_on = 0x1; + + udelay(5); + + /* turn on the power EN_DSP_POWER high*/ + /* currently always on TBD */ + + /* setup hpi control register */ + HPI_HPIC_1 = (u16) 0x0008; + HPI_HPIC_2 = (u16) 0x0008; + + udelay(100); + + return 0; +} + +/* turn off the host port interface */ +static void hpi_inactivate(void) +{ + volatile spc1920_pld_t *pld = (spc1920_pld_t *) CFG_SPC1920_PLD_BASE; + + /* deactivate hpi */ + pld->dsp_hpi_on = 0x0; + + /* reset the dsp */ + /* pld->dsp_reset = 0x0; */ + + /* turn off the power EN_DSP_POWER# high*/ + /* currently always on TBD */ + +} + +/* reset the DSP */ +static void dsp_reset(void) +{ + volatile spc1920_pld_t *pld = (spc1920_pld_t *) CFG_SPC1920_PLD_BASE; + pld->dsp_reset = 0x1; + pld->dsp_hpi_on = 0x0; + + udelay(300000); + + pld->dsp_reset = 0x0; + pld->dsp_hpi_on = 0x1; +} + + +/* write using autoinc (count is number of 32bit words) */ +static int hpi_write_inc(u32 addr, u32 *data, u32 count) +{ + int i; + u16 addr1, addr2; + + addr1 = (u16) ((addr >> 16) & 0xffff); /* First HW is most significant */ + addr2 = (u16) (addr & 0xffff); + + /* write address */ + HPI_HPIA_1 = addr1; + HPI_HPIA_2 = addr2; + + debugX(4, "writing from data=0x%x to 0x%x\n", data, (data+count)); + + for(i=0; i> 16) & 0xffff); + HPI_HPID_INC_2 = (u16) (data[i] & 0xffff); + debugX(4, "hpi_write_inc: data1=0x%x, data2=0x%x\n", + (u16) ((data[i] >> 16) & 0xffff), + (u16) (data[i] & 0xffff)); + } +#if 0 + while(data_ptr < (u16*) (data + count)) { + HPI_HPID_INC_1 = *(data_ptr++); + HPI_HPID_INC_2 = *(data_ptr++); + } +#endif + + /* return number of bytes written */ + return count; +} + +/* + * read using autoinc (count is number of 32bit words) + */ +static int hpi_read_inc(u32 addr, u32 *buf, u32 count) +{ + int i; + u16 addr1, addr2, data1, data2; + + addr1 = (u16) ((addr >> 16) & 0xffff); /* First HW is most significant */ + addr2 = (u16) (addr & 0xffff); + + /* write address */ + HPI_HPIA_1 = addr1; + HPI_HPIA_2 = addr2; + + for(i=0; i> 16) & 0xffff); /* First HW is most significant */ + addr2 = (u16) (addr & 0xffff); + + /* printf("hpi_write_noinc: addr1=0x%x, addr2=0x%x\n", addr1, addr2); */ + + HPI_HPIA_1 = addr1; + HPI_HPIA_2 = addr2; + + data1 = (u16) ((data >> 16) & 0xffff); + data2 = (u16) (data & 0xffff); + + /* printf("hpi_write_noinc: data1=0x%x, data2=0x%x\n", data1, data2); */ + + HPI_HPID_NOINC_1 = data1; + HPI_HPID_NOINC_2 = data2; + + return 0; +} + +/* read from non- auto inc regs */ +static u32 hpi_read_noinc(u32 addr) +{ + u16 addr1, addr2, data1, data2; + u32 ret; + + addr1 = (u16) ((addr >> 16) & 0xffff); /* First HW is most significant */ + addr2 = (u16) (addr & 0xffff); + + HPI_HPIA_1 = addr1; + HPI_HPIA_2 = addr2; + + /* printf("hpi_read_noinc: addr1=0x%x, addr2=0x%x\n", addr1, addr2); */ + + data1 = HPI_HPID_NOINC_1; + data2 = HPI_HPID_NOINC_2; + + /* printf("hpi_read_noinc: data1=0x%x, data2=0x%x\n", data1, data2); */ + + ret = (((u32) data1) << 16) | (data2 & 0xffff); + return ret; + +} + +/* + * Host Port Interface Tests + */ + +#ifndef HPI_TEST_OSZI +/* main test function */ +int hpi_test(void) +{ + int err = 0; + u32 i, ii, pattern, tmp; + + pattern = HPI_TEST_PATTERN; + + u32 test_data[HPI_TEST_CHUNKSIZE]; + u32 read_data[HPI_TEST_CHUNKSIZE]; + + debugX(2, "hpi_test: activating hpi..."); + hpi_activate(); + debugX(2, "OK.\n"); + +#if 0 + /* Dump the first 1024 bytes + * + */ + for(i=0; i<1024; i+=4) { + if(i%16==0) + printf("\n0x%08x: ", i); + printf("0x%08x ", hpi_read_noinc(i)); + } +#endif + + /* HPIA read-write test + * + */ + debugX(1, "hpi_test: starting HPIA read-write tests...\n"); + err |= hpi_write_addr_test(0xdeadc0de); + err |= hpi_write_addr_test(0xbeefd00d); + err |= hpi_write_addr_test(0xabcd1234); + err |= hpi_write_addr_test(0xaaaaaaaa); + if(err) { + debugX(1, "hpi_test: HPIA read-write tests: *** FAILED ***\n"); + return -1; + } + debugX(1, "hpi_test: HPIA read-write tests: OK\n"); + + + /* read write test using nonincremental data regs + * + */ + debugX(1, "hpi_test: starting nonincremental tests...\n"); + for(i=HPI_TEST_START; i> 16)); /* First HW is most significant */ + HPI_HPIA_2 = ((u16) addr); + + read_back = (((u32) HPI_HPIA_1)<<16) | ((u32) HPI_HPIA_2); + + if(read_back == addr) { + debugX(2, " hpi_write_addr_test OK: written=0x%x, read=0x%x\n", + addr, read_back); + return 0; + } else { + debugX(0, " hpi_write_addr_test *** FAILED ***: written=0x%x, read=0x%x\n", + addr, read_back); + return -1; + } + + return 0; +} + +/* test if a simple read/write sequence succeeds */ +static int hpi_read_write_test(u32 addr, u32 data) +{ + u32 read_back; + + hpi_write_noinc(addr, data); + read_back = hpi_read_noinc(addr); + + if(read_back == data) { + debugX(2, " hpi_read_write_test: OK, addr=0x%x written=0x%x, read=0x%x\n", addr, data, read_back); + return 0; + } else { + debugX(0, " hpi_read_write_test: *** FAILED ***, addr=0x%x written=0x%x, read=0x%x\n", addr, data, read_back); + return -1; + } + + return 0; +} + +static int hpi_tiny_autoinc_test(void) +{ + int i; + u32 read_data[TINY_AUTOINC_DATA_SIZE]; + u32 read_data_noinc[TINY_AUTOINC_DATA_SIZE]; + + unsigned int dummy_data[TINY_AUTOINC_DATA_SIZE] = { + 0x11112222, 0x33334444, 0x55556666, 0x77778888, + 0x9999aaaa, 0xbbbbcccc, 0xddddeeee, 0xffff1111, + 0x00010002, 0x00030004, 0x00050006, 0x00070008, + 0x0009000a, 0x000b000c, 0x000d000e, 0x000f0001 + }; + + printf(" writing to autoinc...\n"); + hpi_write_inc(TINY_AUTOINC_BASE_ADDR, dummy_data, TINY_AUTOINC_DATA_SIZE); + + printf(" reading from autoinc...\n"); + hpi_read_inc(TINY_AUTOINC_BASE_ADDR, read_data, TINY_AUTOINC_DATA_SIZE); + + printf(" reading from noinc for comparison...\n"); + for(i=0; i < (TINY_AUTOINC_DATA_SIZE); i++) + read_data_noinc[i] = hpi_read_noinc(TINY_AUTOINC_BASE_ADDR+i*4); + + for(i=0; i < (TINY_AUTOINC_DATA_SIZE); i++) { + printf(" written=0x%x, read(inc)=0x%x, read(noinc)=0x%x\n", + dummy_data[i], read_data[i], read_data_noinc[i]); + } + return 0; +} + +#endif /* CONFIG_SPC1920_HPI_TEST */ diff --git a/board/spc1920/hpi.h b/board/spc1920/hpi.h new file mode 100644 index 00000000000..45038730841 --- /dev/null +++ b/board/spc1920/hpi.h @@ -0,0 +1,28 @@ +/* + * (C) Copyright 2006 + * Markus Klotzbuecher, DENX Software Engineering, mk@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 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 + */ + +int hpi_init(void); + +#ifdef CONFIG_SPC1920_HPI_TEST +int hpi_test(void); +#endif diff --git a/board/spc1920/spc1920.c b/board/spc1920/spc1920.c index 028f4c635de..1fc2ea1fb49 100644 --- a/board/spc1920/spc1920.c +++ b/board/spc1920/spc1920.c @@ -27,9 +27,9 @@ #include #include #include "pld.h" +#include "hpi.h" #define _NOT_USED_ 0xFFFFFFFF -/* #define debug(fmt,args...) printf (fmt ,##args) */ static long int dram_size (long int, long int *, long int); @@ -172,6 +172,8 @@ long int initdram (int board_type) memctl->memc_br1 = (CFG_SDRAM_BASE & BR_BA_MSK) | BR_MS_UPMB | BR_V; udelay (1000); + /* initalize the DSP Host Port Interface */ + hpi_init(); /* PLD Setup */ memctl->memc_or5 = CFG_OR5_PRELIM; @@ -228,6 +230,14 @@ int board_early_init_f(void) return 0; } +int last_stage_init(void) +{ +#ifdef CONFIG_SPC1920_HPI_TEST + printf("CMB1920 Host Port Interface Test: %s\n", + hpi_test() ? "Failed!" : "OK"); +#endif + return 0; +} int checkboard (void) { diff --git a/include/configs/spc1920.h b/include/configs/spc1920.h index 9d3609a67d3..6e99699b30d 100644 --- a/include/configs/spc1920.h +++ b/include/configs/spc1920.h @@ -330,6 +330,40 @@ MBMR_TLFB_4X) /* 0x04804114 */ /* 0x10802114 */ +/* + * DSP Host Port Interface CS3 + */ +#define CFG_SPC1920_HPI_BASE 0x90000000 +#define CFG_PRELIM_OR3_AM 0xF0000000 + +#define CFG_OR3_PRELIM (CFG_PRELIM_OR3_AM | \ + OR_G5LS | \ + OR_SCY_0_CLK | \ + OR_BI) + +#define CFG_BR3_PRELIM ((CFG_SPC1920_HPI_BASE & BR_BA_MSK) | \ + BR_MS_UPMA | \ + BR_PS_16 | \ + BR_V); + +#define CFG_MAMR (MAMR_GPL_A4DIS | \ + MAMR_RLFA_5X | \ + MAMR_WLFA_5X) + +#define CONFIG_SPC1920_HPI_TEST + +#ifdef CONFIG_SPC1920_HPI_TEST +#define HPI_REG(x) (*((volatile u16 *) (CFG_SPC1920_HPI_BASE + x))) +#define HPI_HPIC_1 HPI_REG(0) +#define HPI_HPIC_2 HPI_REG(2) +#define HPI_HPIA_1 HPI_REG(0x2000000) +#define HPI_HPIA_2 HPI_REG(0x2000000 + 2) +#define HPI_HPID_INC_1 HPI_REG(0x1000000) +#define HPI_HPID_INC_2 HPI_REG(0x1000000 + 2) +#define HPI_HPID_NOINC_1 HPI_REG(0x3000000) +#define HPI_HPID_NOINC_2 HPI_REG(0x3000000 + 2) +#endif /* CONFIG_SPC1920_HPI_TEST */ + /* PLD CS5 */ #define CFG_SPC1920_PLD_BASE 0x80000000 #define CFG_PRELIM_OR5_AM 0xffff8000 -- cgit v1.3.1 From 3f34f869162750e5e999fd140f884f5de952bcfe Mon Sep 17 00:00:00 2001 From: Markus Klotzbuecher Date: Tue, 9 Jan 2007 14:57:10 +0100 Subject: Add / enable I2C support on the spc1920 board --- include/configs/spc1920.h | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'include') diff --git a/include/configs/spc1920.h b/include/configs/spc1920.h index 6e99699b30d..6db0d1a1c83 100644 --- a/include/configs/spc1920.h +++ b/include/configs/spc1920.h @@ -89,6 +89,7 @@ | CFG_CMD_PING \ | CFG_CMD_DHCP \ | CFG_CMD_IMMAP \ + | CFG_CMD_I2C \ | CFG_CMD_MII) /* & ~( CFG_CMD_NET)) */ @@ -197,9 +198,30 @@ * I2C configuration */ #if (CONFIG_COMMANDS & CFG_CMD_I2C) -#define CONFIG_HARD_I2C 1 /* I2C with hardware support */ -#define CFG_I2C_SPEED 400000 /* I2C speed and slave address defaults */ -#define CFG_I2C_SLAVE 0x7F +/* enable I2C and select the hardware/software driver */ +#undef CONFIG_HARD_I2C /* I2C with hardware support */ +#define CONFIG_SOFT_I2C 1 /* I2C bit-banged */ + +#define CFG_I2C_SPEED 93000 /* 93 kHz is supposed to work */ +#define CFG_I2C_SLAVE 0xFE + +#ifdef CONFIG_SOFT_I2C +/* + * Software (bit-bang) I2C driver configuration + */ +#define PB_SCL 0x00000020 /* PB 26 */ +#define PB_SDA 0x00000010 /* PB 27 */ + +#define I2C_INIT (immr->im_cpm.cp_pbdir |= PB_SCL) +#define I2C_ACTIVE (immr->im_cpm.cp_pbdir |= PB_SDA) +#define I2C_TRISTATE (immr->im_cpm.cp_pbdir &= ~PB_SDA) +#define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0) +#define I2C_SDA(bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SDA; \ + else immr->im_cpm.cp_pbdat &= ~PB_SDA +#define I2C_SCL(bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ + else immr->im_cpm.cp_pbdat &= ~PB_SCL +#define I2C_DELAY udelay(2) /* 1/4 I2C clock duration */ +#endif /* CONFIG_SOFT_I2C */ #endif /*----------------------------------------------------------------------- -- cgit v1.3.1 From d8d9de1a02fbd880b613d607143d1f57342affc7 Mon Sep 17 00:00:00 2001 From: Markus Klotzbuecher Date: Tue, 9 Jan 2007 14:57:10 +0100 Subject: Update the SPC1920 CMB PLD driver --- board/spc1920/pld.h | 2 +- include/configs/spc1920.h | 16 +++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) (limited to 'include') diff --git a/board/spc1920/pld.h b/board/spc1920/pld.h index 3254f820c1e..5beb71b5cca 100644 --- a/board/spc1920/pld.h +++ b/board/spc1920/pld.h @@ -5,8 +5,8 @@ typedef struct spc1920_pld { uchar com1_en; uchar dsp_reset; uchar dsp_hpi_on; + uchar superv_mode; uchar codec_dsp_power_en; - uchar clk2_en; uchar clk3_select; uchar clk4_select; } spc1920_pld_t; diff --git a/include/configs/spc1920.h b/include/configs/spc1920.h index 6db0d1a1c83..f8909b1d1d4 100644 --- a/include/configs/spc1920.h +++ b/include/configs/spc1920.h @@ -89,7 +89,7 @@ | CFG_CMD_PING \ | CFG_CMD_DHCP \ | CFG_CMD_IMMAP \ - | CFG_CMD_I2C \ + | CFG_CMD_I2C \ | CFG_CMD_MII) /* & ~( CFG_CMD_NET)) */ @@ -217,9 +217,9 @@ #define I2C_TRISTATE (immr->im_cpm.cp_pbdir &= ~PB_SDA) #define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0) #define I2C_SDA(bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SDA; \ - else immr->im_cpm.cp_pbdat &= ~PB_SDA + else immr->im_cpm.cp_pbdat &= ~PB_SDA #define I2C_SCL(bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ - else immr->im_cpm.cp_pbdat &= ~PB_SCL + else immr->im_cpm.cp_pbdat &= ~PB_SCL #define I2C_DELAY udelay(2) /* 1/4 I2C clock duration */ #endif /* CONFIG_SOFT_I2C */ #endif @@ -386,9 +386,11 @@ #define HPI_HPID_NOINC_2 HPI_REG(0x3000000 + 2) #endif /* CONFIG_SPC1920_HPI_TEST */ -/* PLD CS5 */ +/* + * PLD CS5 + */ #define CFG_SPC1920_PLD_BASE 0x80000000 -#define CFG_PRELIM_OR5_AM 0xffff8000 +#define CFG_PRELIM_OR5_AM 0xfff00000 #define CFG_OR5_PRELIM (CFG_PRELIM_OR5_AM | \ OR_CSNT_SAM | \ @@ -399,10 +401,6 @@ #define CFG_BR5_PRELIM ((CFG_SPC1920_PLD_BASE & BR_BA_MSK) | BR_PS_8 | BR_V); -/* #define CFG_PLD_BASE 0x30000000 */ -/* #define CFG_OR5_PRELIM 0xffff1110 */ -/* #define CFG_BR5_PRELIM 0x30000401 */ - /* * Internal Definitions * -- cgit v1.3.1 From 8139567b60d678584b05f0718a681f2047c5e14f Mon Sep 17 00:00:00 2001 From: Markus Klotzbuecher Date: Tue, 9 Jan 2007 14:57:11 +0100 Subject: SMC1 uses external CLK4 instead of BRG on spc1920 --- cpu/mpc8xx/serial.c | 13 +++++++++++-- include/configs/spc1920.h | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) (limited to 'include') diff --git a/cpu/mpc8xx/serial.c b/cpu/mpc8xx/serial.c index 8ae584f2e1d..c8caa793d21 100644 --- a/cpu/mpc8xx/serial.c +++ b/cpu/mpc8xx/serial.c @@ -227,8 +227,17 @@ static int smc_init (void) sp->smc_smcm = 0; sp->smc_smce = 0xff; -#ifdef CFG_SPC1920_SMC1_CLK4 /* clock source is PLD */ - *((volatile uchar *) CFG_SPC1920_PLD_BASE+6) = 0xff; +#ifdef CFG_SPC1920_SMC1_CLK4 + /* clock source is PLD */ + + /* set freq to 19200 Baud */ + *((volatile uchar *) CFG_SPC1920_PLD_BASE+6) = 0x3; + /* configure clk4 as input */ + im->im_ioport.iop_pdpar |= 0x800; + im->im_ioport.iop_pddir &= ~0x800; + + cp->cp_simode = 0x0000; + cp->cp_simode |= 0x7000; #else /* Set up the baud rate generator */ smc_setbrg (); diff --git a/include/configs/spc1920.h b/include/configs/spc1920.h index f8909b1d1d4..a836d829923 100644 --- a/include/configs/spc1920.h +++ b/include/configs/spc1920.h @@ -44,7 +44,7 @@ #define CONFIG_BAUDRATE 19200 /* use PLD CLK4 instead of brg */ -#undef CFG_SPC1920_SMC1_CLK4 +#define CFG_SPC1920_SMC1_CLK4 #define CONFIG_8xx_OSCLK 10000000 /* 10 MHz oscillator on EXTCLK */ #define CONFIG_8xx_CPUCLK_DEFAULT 50000000 -- cgit v1.3.1 From 0be62728aac459ba268d6d752ed49ec0e2bc7348 Mon Sep 17 00:00:00 2001 From: Markus Klotzbuecher Date: Tue, 9 Jan 2007 14:57:12 +0100 Subject: Add support for the DS3231 RTC --- include/configs/spc1920.h | 6 ++ rtc/Makefile | 2 +- rtc/ds3231.c | 193 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 rtc/ds3231.c (limited to 'include') diff --git a/include/configs/spc1920.h b/include/configs/spc1920.h index a836d829923..c6b4d3002b7 100644 --- a/include/configs/spc1920.h +++ b/include/configs/spc1920.h @@ -83,6 +83,7 @@ #ifndef CONFIG_COMMANDS #define CONFIG_COMMANDS (CONFIG_CMD_DFL \ | CFG_CMD_ASKENV \ + | CFG_CMD_DATE \ | CFG_CMD_ECHO \ | CFG_CMD_IMMAP \ | CFG_CMD_JFFS2 \ @@ -194,6 +195,11 @@ #define CFG_CACHELINE_SIZE 16 /* For all MPC8xx CPUs */ #define CFG_CACHELINE_SHIFT 4 /* log base 2 of the above value */ +#ifdef CFG_CMD_DATE +# define CONFIG_RTC_DS3231 +# define CFG_I2C_RTC_ADDR 0x68 +#endif + /*----------------------------------------------------------------------- * I2C configuration */ diff --git a/rtc/Makefile b/rtc/Makefile index cf2b24ef0dd..cdc8ac934f9 100644 --- a/rtc/Makefile +++ b/rtc/Makefile @@ -29,7 +29,7 @@ LIB = $(obj)librtc.a COBJS = date.o \ bf533_rtc.o ds12887.o ds1302.o ds1306.o ds1307.o \ - ds1337.o ds1374.o ds1556.o ds164x.o ds174x.o \ + ds1337.o ds1374.o ds1556.o ds164x.o ds174x.o ds3231.o \ m41t11.o max6900.o m48t35ax.o mc146818.o mk48t59.o \ mpc5xxx.o mpc8xx.o pcf8563.o s3c24x0_rtc.o rs5c372.o diff --git a/rtc/ds3231.c b/rtc/ds3231.c new file mode 100644 index 00000000000..50aeeb5615d --- /dev/null +++ b/rtc/ds3231.c @@ -0,0 +1,193 @@ +/* + * (C) Copyright 2006 + * Markus Klotzbuecher, mk@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 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 + */ + +/* + * Date & Time support (no alarms) for Dallas Semiconductor (now Maxim) + * Extremly Accurate DS3231 Real Time Clock (RTC). + * + * copied from ds1337.c + */ + +#include +#include +#include +#include + +#if defined(CONFIG_RTC_DS3231) && (CONFIG_COMMANDS & CFG_CMD_DATE) + +/*---------------------------------------------------------------------*/ +#undef DEBUG_RTC + +#ifdef DEBUG_RTC +#define DEBUGR(fmt,args...) printf(fmt ,##args) +#else +#define DEBUGR(fmt,args...) +#endif +/*---------------------------------------------------------------------*/ + +/* + * RTC register addresses + */ +#define RTC_SEC_REG_ADDR 0x0 +#define RTC_MIN_REG_ADDR 0x1 +#define RTC_HR_REG_ADDR 0x2 +#define RTC_DAY_REG_ADDR 0x3 +#define RTC_DATE_REG_ADDR 0x4 +#define RTC_MON_REG_ADDR 0x5 +#define RTC_YR_REG_ADDR 0x6 +#define RTC_CTL_REG_ADDR 0x0e +#define RTC_STAT_REG_ADDR 0x0f + + +/* + * RTC control register bits + */ +#define RTC_CTL_BIT_A1IE 0x1 /* Alarm 1 interrupt enable */ +#define RTC_CTL_BIT_A2IE 0x2 /* Alarm 2 interrupt enable */ +#define RTC_CTL_BIT_INTCN 0x4 /* Interrupt control */ +#define RTC_CTL_BIT_RS1 0x8 /* Rate select 1 */ +#define RTC_CTL_BIT_RS2 0x10 /* Rate select 2 */ +#define RTC_CTL_BIT_DOSC 0x80 /* Disable Oscillator */ + +/* + * RTC status register bits + */ +#define RTC_STAT_BIT_A1F 0x1 /* Alarm 1 flag */ +#define RTC_STAT_BIT_A2F 0x2 /* Alarm 2 flag */ +#define RTC_STAT_BIT_OSF 0x80 /* Oscillator stop flag */ + + +static uchar rtc_read (uchar reg); +static void rtc_write (uchar reg, uchar val); +static uchar bin2bcd (unsigned int n); +static unsigned bcd2bin (uchar c); + + +/* + * Get the current time from the RTC + */ +void rtc_get (struct rtc_time *tmp) +{ + uchar sec, min, hour, mday, wday, mon_cent, year, control, status; + + control = rtc_read (RTC_CTL_REG_ADDR); + status = rtc_read (RTC_STAT_REG_ADDR); + sec = rtc_read (RTC_SEC_REG_ADDR); + min = rtc_read (RTC_MIN_REG_ADDR); + hour = rtc_read (RTC_HR_REG_ADDR); + wday = rtc_read (RTC_DAY_REG_ADDR); + mday = rtc_read (RTC_DATE_REG_ADDR); + mon_cent = rtc_read (RTC_MON_REG_ADDR); + year = rtc_read (RTC_YR_REG_ADDR); + + DEBUGR ("Get RTC year: %02x mon/cent: %02x mday: %02x wday: %02x " + "hr: %02x min: %02x sec: %02x control: %02x status: %02x\n", + year, mon_cent, mday, wday, hour, min, sec, control, status); + + if (status & RTC_STAT_BIT_OSF) { + printf ("### Warning: RTC oscillator has stopped\n"); + /* clear the OSF flag */ + rtc_write (RTC_STAT_REG_ADDR, + rtc_read (RTC_STAT_REG_ADDR) & ~RTC_STAT_BIT_OSF); + } + + tmp->tm_sec = bcd2bin (sec & 0x7F); + tmp->tm_min = bcd2bin (min & 0x7F); + tmp->tm_hour = bcd2bin (hour & 0x3F); + tmp->tm_mday = bcd2bin (mday & 0x3F); + tmp->tm_mon = bcd2bin (mon_cent & 0x1F); + tmp->tm_year = bcd2bin (year) + ((mon_cent & 0x80) ? 2000 : 1900); + tmp->tm_wday = bcd2bin ((wday - 1) & 0x07); + tmp->tm_yday = 0; + tmp->tm_isdst= 0; + + DEBUGR ("Get DATE: %4d-%02d-%02d (wday=%d) TIME: %2d:%02d:%02d\n", + tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday, + tmp->tm_hour, tmp->tm_min, tmp->tm_sec); +} + + +/* + * Set the RTC + */ +void rtc_set (struct rtc_time *tmp) +{ + uchar century; + + DEBUGR ("Set DATE: %4d-%02d-%02d (wday=%d) TIME: %2d:%02d:%02d\n", + tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday, + tmp->tm_hour, tmp->tm_min, tmp->tm_sec); + + rtc_write (RTC_YR_REG_ADDR, bin2bcd (tmp->tm_year % 100)); + + century = (tmp->tm_year >= 2000) ? 0x80 : 0; + rtc_write (RTC_MON_REG_ADDR, bin2bcd (tmp->tm_mon) | century); + + rtc_write (RTC_DAY_REG_ADDR, bin2bcd (tmp->tm_wday + 1)); + rtc_write (RTC_DATE_REG_ADDR, bin2bcd (tmp->tm_mday)); + rtc_write (RTC_HR_REG_ADDR, bin2bcd (tmp->tm_hour)); + rtc_write (RTC_MIN_REG_ADDR, bin2bcd (tmp->tm_min)); + rtc_write (RTC_SEC_REG_ADDR, bin2bcd (tmp->tm_sec)); +} + + +/* + * Reset the RTC. We also enable the oscillator output on the + * SQW/INTB* pin and program it for 32,768 Hz output. Note that + * according to the datasheet, turning on the square wave output + * increases the current drain on the backup battery from about + * 600 nA to 2uA. + */ +void rtc_reset (void) +{ + rtc_write (RTC_CTL_REG_ADDR, RTC_CTL_BIT_RS1 | RTC_CTL_BIT_RS2); +} + + +/* + * Helper functions + */ + +static +uchar rtc_read (uchar reg) +{ + return (i2c_reg_read (CFG_I2C_RTC_ADDR, reg)); +} + + +static void rtc_write (uchar reg, uchar val) +{ + i2c_reg_write (CFG_I2C_RTC_ADDR, reg, val); +} + +static unsigned bcd2bin (uchar n) +{ + return ((((n >> 4) & 0x0F) * 10) + (n & 0x0F)); +} + +static unsigned char bin2bcd (unsigned int n) +{ + return (((n / 10) << 4) | (n % 10)); +} + +#endif /* (CONFIG_RTC_DS3231) && (CONFIG_COMMANDS & CFG_CMD_DATE) */ -- cgit v1.3.1 From 5921e5313fc3eadd42770c2b99badd7fae5ecf1e Mon Sep 17 00:00:00 2001 From: Markus Klotzbuecher Date: Tue, 9 Jan 2007 14:57:13 +0100 Subject: Miscellanious spc1920 related cleanups --- board/spc1920/hpi.c | 1 - board/spc1920/spc1920.c | 14 ++++++++++++-- include/configs/spc1920.h | 11 +++++------ 3 files changed, 17 insertions(+), 9 deletions(-) (limited to 'include') diff --git a/board/spc1920/hpi.c b/board/spc1920/hpi.c index 687c170a850..05dd8bd5cb2 100644 --- a/board/spc1920/hpi.c +++ b/board/spc1920/hpi.c @@ -40,7 +40,6 @@ #include "pld.h" #include "hpi.h" -#include "spc1920.h" /* led function */ #define _NOT_USED_ 0xFFFFFFFF diff --git a/board/spc1920/spc1920.c b/board/spc1920/spc1920.c index d0a6ff1eba9..d69b9151721 100644 --- a/board/spc1920/spc1920.c +++ b/board/spc1920/spc1920.c @@ -220,10 +220,20 @@ int board_early_init_f(void) immap->im_ioport.iop_pdpar &= ~(0x0040); immap->im_ioport.iop_pddir |= 0x0040; immap->im_ioport.iop_pddat |= 0x0040; - #endif - /* Enable PD10 (COM2_EN) */ + /* + * Enable console on SMC1. This requires turning on + * the com2_en signal and SMC1_DISABLE + */ + + /* SMC1_DISABLE: PB17 */ + immap->im_cpm.cp_pbodr &= ~0x4000; + immap->im_cpm.cp_pbpar &= ~0x4000; + immap->im_cpm.cp_pbdir |= 0x4000; + immap->im_cpm.cp_pbdat &= ~0x4000; + + /* COM2_EN: PD10 */ immap->im_ioport.iop_pdpar &= ~0x0020; immap->im_ioport.iop_pddir &= ~0x4000; immap->im_ioport.iop_pddir |= 0x0020; diff --git a/include/configs/spc1920.h b/include/configs/spc1920.h index c6b4d3002b7..dcff8a6c9e8 100644 --- a/include/configs/spc1920.h +++ b/include/configs/spc1920.h @@ -51,12 +51,12 @@ #define CFG_8xx_CPUCLK_MIN 40000000 #define CFG_8xx_CPUCLK_MAX 133000000 -#define CFG_RESET_ADDRESS 0xf8000000 +#define CFG_RESET_ADDRESS 0xC0000000 #define CONFIG_BOARD_EARLY_INIT_F +#define CONFIG_LAST_STAGE_INIT - -#if 1 +#if 0 #define CONFIG_BOOTDELAY -1 /* autoboot disabled */ #else #define CONFIG_BOOTDELAY 5 /* autoboot after 5 seconds */ @@ -89,7 +89,6 @@ | CFG_CMD_JFFS2 \ | CFG_CMD_PING \ | CFG_CMD_DHCP \ - | CFG_CMD_IMMAP \ | CFG_CMD_I2C \ | CFG_CMD_MII) /* & ~( CFG_CMD_NET)) */ @@ -248,7 +247,7 @@ *----------------------------------------------------------------------- * PCMCIA config., multi-function pin tri-state */ -#define CFG_SIUMCR (SIUMCR_DBGC00 | SIUMCR_DBPC00 | SIUMCR_MLRC01) +#define CFG_SIUMCR (SIUMCR_FRC) /*----------------------------------------------------------------------- * TBSCR - Time Base Status and Control 11-26 @@ -393,7 +392,7 @@ #endif /* CONFIG_SPC1920_HPI_TEST */ /* - * PLD CS5 + * PLD CS5 */ #define CFG_SPC1920_PLD_BASE 0x80000000 #define CFG_PRELIM_OR5_AM 0xfff00000 -- cgit v1.3.1 From 38ccd2fdf3364a53fe80e9b365303ecdafc9e223 Mon Sep 17 00:00:00 2001 From: Markus Klotzbuecher Date: Tue, 9 Jan 2007 14:57:13 +0100 Subject: SPC1920: update the HPI register addresses to work with the second generation of hardware --- include/configs/spc1920.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'include') diff --git a/include/configs/spc1920.h b/include/configs/spc1920.h index dcff8a6c9e8..8f5eace6925 100644 --- a/include/configs/spc1920.h +++ b/include/configs/spc1920.h @@ -383,12 +383,12 @@ #define HPI_REG(x) (*((volatile u16 *) (CFG_SPC1920_HPI_BASE + x))) #define HPI_HPIC_1 HPI_REG(0) #define HPI_HPIC_2 HPI_REG(2) -#define HPI_HPIA_1 HPI_REG(0x2000000) -#define HPI_HPIA_2 HPI_REG(0x2000000 + 2) -#define HPI_HPID_INC_1 HPI_REG(0x1000000) -#define HPI_HPID_INC_2 HPI_REG(0x1000000 + 2) -#define HPI_HPID_NOINC_1 HPI_REG(0x3000000) -#define HPI_HPID_NOINC_2 HPI_REG(0x3000000 + 2) +#define HPI_HPIA_1 HPI_REG(0x2000008) +#define HPI_HPIA_2 HPI_REG(0x2000008 + 2) +#define HPI_HPID_INC_1 HPI_REG(0x1000004) +#define HPI_HPID_INC_2 HPI_REG(0x1000004 + 2) +#define HPI_HPID_NOINC_1 HPI_REG(0x300000c) +#define HPI_HPID_NOINC_2 HPI_REG(0x300000c + 2) #endif /* CONFIG_SPC1920_HPI_TEST */ /* -- cgit v1.3.1 From 9295acb77481cf099ef9b40e1fa2d145b3c7490c Mon Sep 17 00:00:00 2001 From: Markus Klotzbuecher Date: Tue, 9 Jan 2007 14:57:13 +0100 Subject: SPC1920: add support for the FM18L08 Ramtron FRAM --- board/spc1920/spc1920.c | 5 +++++ include/configs/spc1920.h | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/board/spc1920/spc1920.c b/board/spc1920/spc1920.c index d69b9151721..06ec60e2a75 100644 --- a/board/spc1920/spc1920.c +++ b/board/spc1920/spc1920.c @@ -175,6 +175,11 @@ long int initdram (int board_type) /* initalize the DSP Host Port Interface */ hpi_init(); + /* PLD Setup */ + memctl->memc_or4 = CFG_OR4_PRELIM; + memctl->memc_br4 = CFG_BR4_PRELIM; + udelay(1000); + /* PLD Setup */ memctl->memc_or5 = CFG_OR5_PRELIM; memctl->memc_br5 = CFG_BR5_PRELIM; diff --git a/include/configs/spc1920.h b/include/configs/spc1920.h index 8f5eace6925..0b07a45d674 100644 --- a/include/configs/spc1920.h +++ b/include/configs/spc1920.h @@ -391,11 +391,24 @@ #define HPI_HPID_NOINC_2 HPI_REG(0x300000c + 2) #endif /* CONFIG_SPC1920_HPI_TEST */ +/* + * Ramtron FM18L08 FRAM 32KB on CS4 + */ +#define CFG_SPC1920_FRAM_BASE 0x80100000 +#define CFG_PRELIM_OR4_AM 0xffff8000 +#define CFG_OR4_PRELIM (CFG_PRELIM_OR4_AM | \ + OR_ACS_DIV2 | \ + OR_BI | \ + OR_SCY_4_CLK | \ + OR_TRLX) + +#define CFG_BR4_PRELIM ((CFG_SPC1920_FRAM_BASE & BR_BA_MSK) | BR_PS_8 | BR_V); + /* * PLD CS5 */ #define CFG_SPC1920_PLD_BASE 0x80000000 -#define CFG_PRELIM_OR5_AM 0xfff00000 +#define CFG_PRELIM_OR5_AM 0xffff8000 #define CFG_OR5_PRELIM (CFG_PRELIM_OR5_AM | \ OR_CSNT_SAM | \ -- cgit v1.3.1 From 8fc2102faa23593c80381437c09f7745a14deb40 Mon Sep 17 00:00:00 2001 From: Markus Klotzbuecher Date: Tue, 9 Jan 2007 14:57:14 +0100 Subject: Fix the cpu speed setup to work with all boards. --- include/configs/spc1920.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include') diff --git a/include/configs/spc1920.h b/include/configs/spc1920.h index 0b07a45d674..fb7062400ba 100644 --- a/include/configs/spc1920.h +++ b/include/configs/spc1920.h @@ -310,7 +310,7 @@ * FLASH timing: */ #define CFG_OR_TIMING_FLASH (OR_ACS_DIV1 | OR_TRLX | OR_CSNT_SAM | \ - OR_SCY_3_CLK | OR_EHTR | OR_BI) + OR_SCY_6_CLK | OR_EHTR | OR_BI) #define CFG_OR0_REMAP (CFG_REMAP_OR_AM | CFG_OR_TIMING_FLASH) #define CFG_OR0_PRELIM (CFG_PRELIM_OR_AM | CFG_OR_TIMING_FLASH) -- cgit v1.3.1 From 67fea022fa957f59653b5238c7496f80a6b70432 Mon Sep 17 00:00:00 2001 From: Markus Klotzbuecher Date: Tue, 9 Jan 2007 16:02:48 +0100 Subject: SPC1920: cleanup memory contoller setup --- board/spc1920/hpi.c | 4 ++-- board/spc1920/spc1920.c | 11 +++-------- include/configs/spc1920.h | 10 +++++----- 3 files changed, 10 insertions(+), 15 deletions(-) (limited to 'include') diff --git a/board/spc1920/hpi.c b/board/spc1920/hpi.c index 05dd8bd5cb2..3c36f7911bc 100644 --- a/board/spc1920/hpi.c +++ b/board/spc1920/hpi.c @@ -148,8 +148,8 @@ int hpi_init(void) udelay(100); memctl->memc_mamr = CFG_MAMR; - memctl->memc_or3 = CFG_OR3_PRELIM; - memctl->memc_br3 = CFG_BR3_PRELIM; + memctl->memc_or3 = CFG_OR3; + memctl->memc_br3 = CFG_BR3; /* reset dsp */ dsp_reset(); diff --git a/board/spc1920/spc1920.c b/board/spc1920/spc1920.c index 06ec60e2a75..1f5dcb5d3e0 100644 --- a/board/spc1920/spc1920.c +++ b/board/spc1920/spc1920.c @@ -175,14 +175,9 @@ long int initdram (int board_type) /* initalize the DSP Host Port Interface */ hpi_init(); - /* PLD Setup */ - memctl->memc_or4 = CFG_OR4_PRELIM; - memctl->memc_br4 = CFG_BR4_PRELIM; - udelay(1000); - - /* PLD Setup */ - memctl->memc_or5 = CFG_OR5_PRELIM; - memctl->memc_br5 = CFG_BR5_PRELIM; + /* FRAM Setup */ + memctl->memc_or4 = CFG_OR4; + memctl->memc_br4 = CFG_BR4; udelay(1000); return (size_b0); diff --git a/include/configs/spc1920.h b/include/configs/spc1920.h index fb7062400ba..09bbebdce89 100644 --- a/include/configs/spc1920.h +++ b/include/configs/spc1920.h @@ -361,14 +361,14 @@ * DSP Host Port Interface CS3 */ #define CFG_SPC1920_HPI_BASE 0x90000000 -#define CFG_PRELIM_OR3_AM 0xF0000000 +#define CFG_PRELIM_OR3_AM 0xF8000000 -#define CFG_OR3_PRELIM (CFG_PRELIM_OR3_AM | \ +#define CFG_OR3 (CFG_PRELIM_OR3_AM | \ OR_G5LS | \ OR_SCY_0_CLK | \ OR_BI) -#define CFG_BR3_PRELIM ((CFG_SPC1920_HPI_BASE & BR_BA_MSK) | \ +#define CFG_BR3 ((CFG_SPC1920_HPI_BASE & BR_BA_MSK) | \ BR_MS_UPMA | \ BR_PS_16 | \ BR_V); @@ -396,13 +396,13 @@ */ #define CFG_SPC1920_FRAM_BASE 0x80100000 #define CFG_PRELIM_OR4_AM 0xffff8000 -#define CFG_OR4_PRELIM (CFG_PRELIM_OR4_AM | \ +#define CFG_OR4 (CFG_PRELIM_OR4_AM | \ OR_ACS_DIV2 | \ OR_BI | \ OR_SCY_4_CLK | \ OR_TRLX) -#define CFG_BR4_PRELIM ((CFG_SPC1920_FRAM_BASE & BR_BA_MSK) | BR_PS_8 | BR_V); +#define CFG_BR4 ((CFG_SPC1920_FRAM_BASE & BR_BA_MSK) | BR_PS_8 | BR_V); /* * PLD CS5 -- cgit v1.3.1 From d9384de2f571046e71081bae22b49e3d5ca2e3d5 Mon Sep 17 00:00:00 2001 From: Marian Balakowicz Date: Wed, 10 Jan 2007 00:26:15 +0100 Subject: CAM5200 flash driver modifications: - use CFI driver (replaces custom flash driver) for main 'cam5200' target - add second build target 'cam5200_niosflash' which still uses custom driver --- Makefile | 5 +++++ board/tqm5200/cam5200_flash.c | 4 ++-- include/configs/TQM5200.h | 20 ++++++++++---------- 3 files changed, 17 insertions(+), 12 deletions(-) (limited to 'include') diff --git a/Makefile b/Makefile index a973dffc52a..0cad2263acd 100644 --- a/Makefile +++ b/Makefile @@ -557,6 +557,7 @@ Total5200_Rev2_lowboot_config: unconfig @$(MKCONFIG) -a Total5200 ppc mpc5xxx total5200 cam5200_config \ +cam5200_niosflash_config \ fo300_config \ MiniFAP_config \ TQM5200S_config \ @@ -574,6 +575,10 @@ TQM5200_STK100_config: unconfig echo "#define CONFIG_TQM5200_B" >>$(obj)include/config.h ; \ echo "... TQM5200S on Cam5200" ; \ } + @[ -z "$(findstring niosflash,$@)" ] || \ + { echo "#define CONFIG_CAM5200_NIOSFLASH" >>$(obj)include/config.h ; \ + echo "... with NIOS flash driver" ; \ + } @[ -z "$(findstring fo300,$@)" ] || \ { echo "#define CONFIG_FO300" >>$(obj)include/config.h ; \ echo "... TQM5200 on FO300" ; \ diff --git a/board/tqm5200/cam5200_flash.c b/board/tqm5200/cam5200_flash.c index 8c3f62e398c..b3f095d807f 100644 --- a/board/tqm5200/cam5200_flash.c +++ b/board/tqm5200/cam5200_flash.c @@ -25,7 +25,7 @@ #include #include -#ifdef CONFIG_CAM5200 +#if defined(CONFIG_CAM5200) && defined(CONFIG_CAM5200_NIOSFLASH) #if 0 #define DEBUGF(x...) printf(x) @@ -783,4 +783,4 @@ unsigned long flash_init(void) return total_b; } -#endif /* ifdef CONFIG_CAM5200 */ +#endif /* if defined(CONFIG_CAM5200) && defined(CONFIG_CAM5200_NIOSFLASH) */ diff --git a/include/configs/TQM5200.h b/include/configs/TQM5200.h index 08674ca49f5..15906a0a379 100644 --- a/include/configs/TQM5200.h +++ b/include/configs/TQM5200.h @@ -325,15 +325,7 @@ */ #define CFG_FLASH_BASE 0xFC000000 -#ifndef CONFIG_CAM5200 -/* use CFI flash driver */ -#define CFG_FLASH_CFI 1 /* Flash is CFI conformant */ -#define CFG_FLASH_CFI_DRIVER 1 /* Use the common driver */ -#define CFG_FLASH_BANKS_LIST { CFG_BOOTCS_START } -#define CFG_MAX_FLASH_BANKS 1 /* max num of flash banks - (= chip selects) */ -#define CFG_MAX_FLASH_SECT 512 /* max num of sects on one chip */ -#else /* CONFIG_CAM5200 */ +#if defined(CONFIG_CAM5200) && defined(CONFIG_CAM5200_NIOSFLASH) #define CFG_MAX_FLASH_BANKS 2 /* max num of flash banks (= chip selects) */ #define CFG_FLASH_WORD_SIZE unsigned int /* main flash device with */ @@ -344,7 +336,15 @@ #define CFG_FLASH_ADDR1 0x2AA #define CFG_FLASH_2ND_16BIT_DEV 1 /* NIOS flash is a 16bit device */ #define CFG_MAX_FLASH_SECT 128 -#endif /* ifndef CONFIG_CAM5200 */ +#else +/* use CFI flash driver */ +#define CFG_FLASH_CFI 1 /* Flash is CFI conformant */ +#define CFG_FLASH_CFI_DRIVER 1 /* Use the common driver */ +#define CFG_FLASH_BANKS_LIST { CFG_BOOTCS_START } +#define CFG_MAX_FLASH_BANKS 1 /* max num of flash banks + (= chip selects) */ +#define CFG_MAX_FLASH_SECT 512 /* max num of sects on one chip */ +#endif #define CFG_FLASH_EMPTY_INFO #define CFG_FLASH_SIZE 0x04000000 /* 64 MByte */ -- cgit v1.3.1 From 6abaee42621c07e81a2cd189ad4368b5e8c50280 Mon Sep 17 00:00:00 2001 From: Reinhard Thies Date: Wed, 10 Jan 2007 14:41:14 +0100 Subject: Adjusted default environment for cam5200 board. --- include/configs/TQM5200.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/configs/TQM5200.h b/include/configs/TQM5200.h index 15906a0a379..7069b35ad60 100644 --- a/include/configs/TQM5200.h +++ b/include/configs/TQM5200.h @@ -231,6 +231,17 @@ "protect on FC000000 +${filesize}\0" #endif +#ifndef CONFIG_CAM5200 +#define CUSTOM_ENV_SETTINGS \ + "bootfile=/tftpboot/tqm5200/uImage\0" \ + "u-boot=/tftpboot/tqm5200/u-boot.bin\0" +#else +#define CUSTOM_ENV_SETTINGS \ + "bootfile=cam5200/uImage\0" \ + "u-boot=cam5200/u-boot.bin\0" \ + "setup=tftp 200000 cam5200/setup.img; autoscr 200000\0" +#endif + #define CONFIG_EXTRA_ENV_SETTINGS \ "netdev=eth0\0" \ "rootpath=/opt/eldk/ppc_6xx\0" \ @@ -248,8 +259,7 @@ "bootm ${kernel_addr}\0" \ "net_nfs=tftp 200000 ${bootfile};run nfsargs addip addcons;" \ "bootm\0" \ - "bootfile=/tftpboot/tqm5200/uImage\0" \ - "u-boot=/tftpboot/tqm5200/u-boot.bin\0" \ + CUSTOM_ENV_SETTINGS \ "load=tftp 200000 ${u-boot}\0" \ ENV_UPDT \ "" -- cgit v1.3.1 From ca43ba18e910206ef8063e4b22d282630bff3fd2 Mon Sep 17 00:00:00 2001 From: Heiko Schocher Date: Thu, 11 Jan 2007 15:44:44 +0100 Subject: Added support for the SOLIDCARD III board from Eurodesign Signed-off-by: Heiko Schocher --- Makefile | 3 + board/solidcard3/Makefile | 47 +++ board/solidcard3/config.mk | 24 ++ board/solidcard3/init.S | 383 +++++++++++++++++++++ board/solidcard3/solidcard3.c | 779 ++++++++++++++++++++++++++++++++++++++++++ board/solidcard3/solidcard3.h | 117 +++++++ board/solidcard3/u-boot.lds | 150 ++++++++ cpu/ppc4xx/405gp_pci.c | 4 +- cpu/ppc4xx/cpu_init.c | 5 +- drivers/cfi_flash.c | 12 +- include/configs/SOLIDCARD3.h | 537 +++++++++++++++++++++++++++++ include/ppc405.h | 1 + lib_ppc/board.c | 16 + 13 files changed, 2074 insertions(+), 4 deletions(-) create mode 100644 board/solidcard3/Makefile create mode 100644 board/solidcard3/config.mk create mode 100644 board/solidcard3/init.S create mode 100644 board/solidcard3/solidcard3.c create mode 100644 board/solidcard3/solidcard3.h create mode 100644 board/solidcard3/u-boot.lds create mode 100644 include/configs/SOLIDCARD3.h (limited to 'include') diff --git a/Makefile b/Makefile index b145be43f4c..28c6aec4de1 100644 --- a/Makefile +++ b/Makefile @@ -1193,6 +1193,9 @@ sequoia_nand_config: unconfig @echo "TEXT_BASE = 0x01000000" > $(obj)board/amcc/sequoia/config.tmp @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk +SOLIDCARD3_config:unconfig + @./mkconfig $(@:_config=) ppc ppc4xx solidcard3 + sycamore_config: unconfig @echo "Configuring for sycamore board as subset of walnut..." @$(MKCONFIG) -a walnut ppc ppc4xx walnut amcc diff --git a/board/solidcard3/Makefile b/board/solidcard3/Makefile new file mode 100644 index 00000000000..1b0b15fc626 --- /dev/null +++ b/board/solidcard3/Makefile @@ -0,0 +1,47 @@ +# +# (C) Copyright 2000 +# 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 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# 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 +# + +include $(TOPDIR)/config.mk + +LIB = lib$(BOARD).a + +OBJS = $(BOARD).o sc3nand.o +SOBJS = init.o + +$(LIB): $(OBJS) $(SOBJS) + $(AR) crv $@ $^ + +clean: + rm -f $(SOBJS) $(OBJS) + +distclean: clean + rm -f $(LIB) core *.bak .depend + +######################################################################### + +.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) + $(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ + +sinclude .depend + +######################################################################### diff --git a/board/solidcard3/config.mk b/board/solidcard3/config.mk new file mode 100644 index 00000000000..1bdf5e4fcf3 --- /dev/null +++ b/board/solidcard3/config.mk @@ -0,0 +1,24 @@ +# +# (C) Copyright 2000 +# 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 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# 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 +# + +TEXT_BASE = 0xFFFC0000 diff --git a/board/solidcard3/init.S b/board/solidcard3/init.S new file mode 100644 index 00000000000..36039e8f8de --- /dev/null +++ b/board/solidcard3/init.S @@ -0,0 +1,383 @@ +/*------------------------------------------------------------------------------+ + * + * This souce code has been made available to you by EuroDesign + * (www.eurodsn.de). It's based on the original IBM source code, so + * this follows: + * + * This source code has been made available to you by IBM on an AS-IS + * basis. Anyone receiving this source is licensed under IBM + * copyrights to use it in any way he or she deems fit, including + * copying it, modifying it, compiling it, and redistributing it either + * with or without modifications. No license under IBM patents or + * patent applications is to be implied by the copyright license. + * + * Any user of this software should understand that IBM cannot provide + * technical support for this software and will not be responsible for + * any consequences resulting from the use of this software. + * + * Any person who transfers this source code or any derivative work + * must include the IBM copyright notice, this paragraph, and the + * preceding two paragraphs in the transferred software. + * + * COPYRIGHT I B M CORPORATION 1995 + * LICENSED MATERIAL - PROGRAM PROPERTY OF I B M + *------------------------------------------------------------------------------- */ + +#include +#include + +#define _LINUX_CONFIG_H 1 /* avoid reading Linux autoconf.h file */ + +#include +#include + +#include +#include + +/** + * ext_bus_cntlr_init - Initializes the External Bus Controller for the external peripherals + * + * IMPORTANT: For pass1 this code must run from cache since you can not + * reliably change a peripheral banks timing register (pbxap) while running + * code from that bank. For ex., since we are running from ROM on bank 0, we + * can NOT execute the code that modifies bank 0 timings from ROM, so + * we run it from cache. + * + * Bank 0 - Boot-Flash + * Bank 1 - NAND-Flash + * Bank 2 - ISA bus + * Bank 3 - Second Flash + * Bank 4 - USB controller + */ + .globl ext_bus_cntlr_init +ext_bus_cntlr_init: +/* + * We need the current boot up configuration to set correct + * timings into internal flash and external flash + */ + mfdcr r24,strap /* xxxx xxxx xxxx xxx? ?xxx xxxx xxxx xxxx + 0 0 -> 8 bit external ROM + 0 1 -> 16 bit internal ROM */ + addi r4,0,2 + srw r24,r24,r4 /* shift right r24 two positions */ + andi. r24,r24,0x06000 +/* + * All calculations are based on 33MHz EBC clock. + * + * First, create a "very slow" timing (~250ns) with burst mode enabled + * This is need for the external flash access + */ + lis r25,0x0800 + ori r25,r25,0x0280 /* 0000 1000 0xxx 0000 0000 0010 100x xxxx = 0x03800280 +/* + * Second, create a fast timing: + * 90ns first cycle - 3 clock access + * and 90ns burst cycle, plus 1 clock after the last access + * This is used for the internal access + */ + lis r26,0x8900 + ori r26,r26,0x0280 /* 1000 1001 0xxx 0000 0000 0010 100x xxxx +/* + * We can't change settings on CS# if we currently use them. + * -> load a few instructions into cache and run this code from cache + */ + mflr r4 /* save link register */ + bl ..getAddr +..getAddr: + mflr r3 /* get address of ..getAddr */ + mtlr r4 /* restore link register */ + addi r4,0,14 /* set ctr to 10; used to prefetch */ + mtctr r4 /* 10 cache lines to fit this function + in cache (gives us 8x10=80 instructions) */ +..ebcloop: + icbt r0,r3 /* prefetch cache line for addr in r3 */ + addi r3,r3,32 /* move to next cache line */ + bdnz ..ebcloop /* continue for 10 cache lines */ +/* + * Delay to ensure all accesses to ROM are complete before changing + * bank 0 timings. 200usec should be enough. + * 200,000,000 (cycles/sec) X .000200 (sec) = 0x9C40 cycles + */ + lis r3,0x0 + ori r3,r3,0xA000 /* ensure 200usec have passed since reset */ + mtctr r3 +..spinlp: + bdnz ..spinlp /* spin loop */ + +/*----------------------------------------------------------------------- + * Memory Bank 0 (BOOT-ROM) initialization + * 0xFFEF00000....0xFFFFFFF + * We only have to change the timing. Mapping is ok by boot-strapping + *----------------------------------------------------------------------- */ + + li r4,pb0ap /* PB0AP=Peripheral Bank 0 Access Parameters */ + mtdcr ebccfga,r4 + + mr r4,r26 /* assume internal fast flash is boot flash */ + cmpwi r24,0x2000 /* assumption true? ... */ + beq 1f /* ...yes! */ + mr r4,r25 /* ...no, use the slow variant */ + mr r25,r26 /* use this for the other flash */ +1: + mtdcr ebccfgd,r4 /* change timing now */ + + li r4,pb0cr /* PB0CR=Peripheral Bank 0 Control Register */ + mtdcr ebccfga,r4 + mfdcr r4,ebccfgd + lis r3,0x0001 + ori r3,r3,0x8000 /* allow reads and writes */ + or r4,r4,r3 + mtdcr ebccfgd,r4 + +/*----------------------------------------------------------------------- + * Memory Bank 3 (Second-Flash) initialization + * 0xF0000000...0xF01FFFFF -> 2MB + *----------------------------------------------------------------------- */ + + li r4,pb3ap /* Peripheral Bank 1 Access Parameter */ + mtdcr ebccfga,r4 + mtdcr ebccfgd,r2 /* change timing */ + + li r4,pb3cr /* Peripheral Bank 1 Configuration Registers */ + mtdcr ebccfga,r4 + + lis r4,0xF003 + ori r4,r4,0x8000 +/* + * Consider boot configuration + */ + xori r24,r24,0x2000 /* invert current bus width */ + or r4,r4,r24 + mtdcr ebccfgd,r4 + +/*----------------------------------------------------------------------- + * Memory Bank 1 (NAND-Flash) initialization + * 0x77D00000...0x77DFFFFF -> 1MB + * - the write/read pulse to the NAND can be as short as 25ns, bus the cycle time is always 50ns + * - the setup time is 0ns + * - the hold time is 15ns + * -> + * - TWT = 0 + * - CSN = 0 + * - OEN = 0 + * - WBN = 0 + * - WBF = 0 + * - TH = 1 + * ----> 2 clocks per cycle = 60ns cycle (30ns active, 30ns hold) + *----------------------------------------------------------------------- */ + + li r4,pb1ap /* Peripheral Bank 1 Access Parameter */ + mtdcr ebccfga,r4 + + lis r4,0x0000 + ori r4,r4,0x0200 + mtdcr ebccfgd,r4 + + li r4,pb1cr /* Peripheral Bank 1 Configuration Registers */ + mtdcr ebccfga,r4 + + lis r4,0x77D1 + ori r4,r4,0x8000 + mtdcr ebccfgd,r4 + + +/* USB init (without acceleration) */ +#ifndef CONFIG_ISP1161_PRESENT + li r4,pb4ap /* PB4AP=Peripheral Bank 4 Access Parameters */ + mtdcr ebccfga,r4 + lis r4,0x0180 + ori r4,r4,0x5940 + mtdcr ebccfgd,r4 +#endif + +/*----------------------------------------------------------------------- + * Memory Bank 2 (ISA Access) initialization (plus memory bank 6 and 7) + * 0x78000000...0x7BFFFFFF -> 64 MB + * Wir arbeiten bei 33 MHz -> 30ns + *----------------------------------------------------------------------- + + A7 (ppc notation) or A24 (standard notation) decides about + the type of access: + A7/A24=0 -> memory cycle + A7//A24=1 -> I/O cycle +*/ + li r4,pb2ap /* PB2AP=Peripheral Bank 2 Access Parameters */ + mtdcr ebccfga,r4 +/* + We emulate an ISA access + + 1. Address active + 2. wait 0 EBC clocks -> CSN=0 + 3. set CS# + 4. wait 0 EBC clock -> OEN/WBN=0 + 5. set OE#/WE# + 6. wait 4 clocks (ca. 90ns) and for Ready signal + 7. hold for 4 clocks -> TH=4 +*/ + +#if 1 +/* faster access to isa-bus */ + lis r4,0x0180 + ori r4,r4,0x5940 +#else + lis r4,0x0100 + ori r4,r4,0x0340 +#endif + mtdcr ebccfgd,r4 + +#ifdef IDE_USES_ISA_EMULATION + li r25,pb5ap /* PB5AP=Peripheral Bank 5 Access Parameters */ + mtdcr ebccfga,r25 + mtdcr ebccfgd,r4 +#endif + + li r25,pb6ap /* PB6AP=Peripheral Bank 6 Access Parameters */ + mtdcr ebccfga,r25 + mtdcr ebccfgd,r4 + li r25,pb7ap /* PB7AP=Peripheral Bank 7 Access Parameters */ + mtdcr ebccfga,r25 + mtdcr ebccfgd,r4 + + li r25,pb2cr /* PB2CR=Peripheral Bank 2 Configuration Register */ + mtdcr ebccfga,r25 + + lis r4,0x780B + ori r4,r4,0xA000 + mtdcr ebccfgd,r4 +/* + * the other areas are only 1MiB in size + */ + lis r4,0x7401 + ori r4,r4,0xA000 + + li r25,pb6cr /* PB6CR=Peripheral Bank 6 Configuration Register */ + mtdcr ebccfga,r25 + lis r4,0x7401 + ori r4,r4,0xA000 + mtdcr ebccfgd,r4 + + li r25,pb7cr /* PB7CR=Peripheral Bank 7 Configuration Register */ + mtdcr ebccfga,r25 + lis r4,0x7411 + ori r4,r4,0xA000 + mtdcr ebccfgd,r4 + +#ifndef CONFIG_ISP1161_PRESENT + li r25,pb4cr /* PB4CR=Peripheral Bank 4 Configuration Register */ + mtdcr ebccfga,r25 + lis r4,0x7421 + ori r4,r4,0xA000 + mtdcr ebccfgd,r4 +#endif +#ifdef IDE_USES_ISA_EMULATION + li r25,pb5cr /* PB5CR=Peripheral Bank 5 Configuration Register */ + mtdcr ebccfga,r25 + lis r4,0x0000 + ori r4,r4,0x0000 + mtdcr ebccfgd,r4 +#endif + +/*----------------------------------------------------------------------- + * Memory bank 4: USB controller Philips ISP6111 + * 0x77C00000 ... 0x77CFFFFF + * + * The chip is connected to: + * - CPU CS#4 + * - CPU IRQ#2 + * - CPU DMA 3 + * + * Timing: + * - command to first data: 300ns. Software must ensure this timing! + * - Write pulse: 26ns + * - Read pulse: 33ns + * - read cycle time: 150ns + * - write cycle time: 140ns + * + * Note: All calculations are based on 33MHz EBC clock. One '#' or '_' is 30ns + * + * |- 300ns --| + * |---- 420ns ---|---- 420ns ---| cycle + * CS ############:###____#######:###____####### + * OE ############:####___#######:####___####### + * WE ############:####__########:####__######## + * + * ----> 2 clocks RD/WR pulses: 60ns + * ----> CSN: 3 clock, 90ns + * ----> OEN: 1 clocks (read cycle) + * ----> WBN: 1 clocks (write cycle) + * ----> WBE: 2 clocks + * ----> TH: 7 clock, 210ns + * ----> TWT: 7 clocks + *----------------------------------------------------------------------- */ + +#ifdef CONFIG_ISP1161_PRESENT + + li r4,pb4ap /* PB4AP=Peripheral Bank 4 Access Parameters */ + mtdcr ebccfga,r4 + + lis r4,0x030D + ori r4,r4,0x5E80 + mtdcr ebccfgd,r4 + + li r4,pb4cr /* PB2CR=Peripheral Bank 4 Configuration Register */ + mtdcr ebccfga,r4 + + lis r4,0x77C1 + ori r4,r4,0xA000 + mtdcr ebccfgd,r4 + +#endif + +#ifndef IDE_USES_ISA_EMULATION + +/*----------------------------------------------------------------------- + * Memory Bank 5 used for IDE access + * + * Timings for IDE Interface + * + * SETUP / LENGTH / HOLD - cycles valid for 33.3 MHz clk -> 30ns cycle time + * 70 165 30 PIO-Mode 0, [ns] + * 3 6 1 [Cycles] ----> AP=0x040C0200 + * 50 125 20 PIO-Mode 1, [ns] + * 2 5 1 [Cycles] ----> AP=0x03080200 + * 30 100 15 PIO-Mode 2, [ns] + * 1 4 1 [Cycles] ----> AP=0x02040200 + * 30 80 10 PIO-Mode 3, [ns] + * 1 3 1 [Cycles] ----> AP=0x01840200 + * 25 70 10 PIO-Mode 4, [ns] + * 1 3 1 [Cycles] ----> AP=0x01840200 + * + *----------------------------------------------------------------------- */ + + li r4,pb5ap + mtdcr ebccfga,r4 + lis r4,0x040C + ori r4,r4,0x0200 + mtdcr ebccfgd,r4 + + li r4,pb5cr /* PB2CR=Peripheral Bank 2 Configuration Register */ + mtdcr ebccfga,r4 + + lis r4,0x7A01 + ori r4,r4,0xA000 + mtdcr ebccfgd,r4 +#endif +/* + * External Peripheral Control Register + */ + li r4,epcr + mtdcr ebccfga,r4 + + lis r4,0xB84E + ori r4,r4,0xF000 + mtdcr ebccfgd,r4 +/* + * drive POST code + */ + lis r4,0x7900 + ori r4,r4,0x0080 + li r3,0x0001 + stb r3,0(r4) /* 01 -> external bus controller is initialized */ + nop /* pass2 DCR errata #8 */ + blr + diff --git a/board/solidcard3/solidcard3.c b/board/solidcard3/solidcard3.c new file mode 100644 index 00000000000..804471178d8 --- /dev/null +++ b/board/solidcard3/solidcard3.c @@ -0,0 +1,779 @@ +/* + * (C) Copyright 2007 + * Heiko Schocher, DENX Software Engineering, . + * + * (C) Copyright 2003 + * Juergen Beisert, EuroDesign embedded technologies, info@eurodsn.de + * Derived from walnut.c + * + * (C) Copyright 2000 + * 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 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 + * + * $Log:$ + */ + +#include +#include +#include +#include "solidcard3.h" +#include +#include +#include + +#undef writel +#undef writeb +#define writeb(b,addr) ((*(volatile u8 *) (addr)) = (b)) +#define writel(b,addr) ((*(volatile u32 *) (addr)) = (b)) + +/* write only register to configure things in our CPLD */ +#define CPLD_CONTROL_1 0x79000102 +#define CPLD_VERSION 0x79000103 + +#define IS_CAMERON ((*(unsigned char *)(CPLD_VERSION)== 0x32) ? 1 : 0) + +static struct pci_controller hose={0,}; + +/************************************************************ + * Standard definition + ************************************************************/ + +/* CPC0_CR0 Function ISA bus + - GPIO0 + - GPIO1 -> Output: NAND-Command Latch Enable + - GPIO2 -> Output: NAND Address Latch Enable + - GPIO3 -> IRQ input ISA-IRQ #5 (through CPLD) + - GPIO4 -> Output: NAND-Chip Enable + - GPIO5 -> IRQ input ISA-IRQ#7 (through CPLD) + - GPIO6 -> IRQ input ISA-IRQ#9 (through CPLD) + - GPIO7 -> IRQ input ISA-IRQ#10 (through CPLD) + - GPIO8 -> IRQ input ISA-IRQ#11 (through CPLD) + - GPIO9 -> IRQ input ISA-IRQ#12 (through CPLD) + - GPIO10/CS1# -> CS1# NAND ISA-CS#0 + - GPIO11/CS2# -> CS2# ISA emulation ISA-CS#1 + - GPIO12/CS3# -> CS3# 2nd Flash-Bank ISA-CS#2 or ISA-CS#7 + - GPIO13/CS4# -> CS4# USB HC or ISA emulation ISA-CS#3 + - GPIO14/CS5# -> CS5# Boosted IDE access ISA-CS#4 + - GPIO15/CS6# -> CS6# ISA emulation ISA-CS#5 + - GPIO16/CS7# -> CS7# ISA emulation ISA-CS#6 + - GPIO17/IRQ0 -> GPIO, in, NAND-Ready/Busy# line ISA-IRQ#3 + - GPIO18/IRQ1 -> IRQ input ISA-IRQ#14 + - GPIO19/IRQ2 -> IRQ input or USB ISA-IRQ#4 + - GPIO20/IRQ3 -> IRQ input PCI-IRQ#D + - GPIO21/IRQ4 -> IRQ input PCI-IRQ#C + - GPIO22/IRQ5 -> IRQ input PCI-IRQ#B + - GPIO23/IRQ6 -> IRQ input PCI-IRQ#A + - GPIO24 -> if GPIO output: 0=JTAG CPLD activ, 1=JTAG CPLD inactiv +*/ +/* +| CPLD register: io-space at offset 0x102 (write only) +| 0 +| 1 +| 2 0=CS#4 USB CS#, 1=ISA or GP bus +| 3 +| 4 +| 5 +| 6 1=enable faster IDE access +| 7 +*/ +#define USB_CHIP_ENABLE 0x04 +#define IDE_BOOSTING 0x40 + +/* --------------- USB stuff ------------------------------------- */ +#ifdef CONFIG_ISP1161_PRESENT +/** + * initUsbHost- Initialize the Philips isp1161 HC part if present + * @cpldConfig: Pointer to value in write only CPLD register + * + * Initialize the USB host controller if present and fills the + * scratch register to inform the driver about used resources + */ + +static void initUsbHost (unsigned char *cpldConfig) +{ + int i; + unsigned long usbBase; + /* + * Read back where init.S has located the USB chip + */ + mtdcr (0x012, 0x04); + usbBase = mfdcr (0x013); + if (!(usbBase & 0x18000)) /* enabled? */ + return; + usbBase &= 0xFFF00000; + + /* + * to test for the USB controller enable using of CS#4 and DMA 3 for USB access + */ + writeb (*cpldConfig | USB_CHIP_ENABLE,CPLD_CONTROL_1); + + /* + * first check: is the controller assembled? + */ + hcWriteWord (usbBase, 0x5555, HcScratch); + if (hcReadWord (usbBase, HcScratch) == 0x5555) { + hcWriteWord (usbBase, 0xAAAA, HcScratch); + if (hcReadWord (usbBase, HcScratch) == 0xAAAA) { + if ((hcReadWord (usbBase, HcChipID) & 0xFF00) != 0x6100) + return; /* this is not our controller */ + /* + * try a software reset. This needs up to 10 seconds (see datasheet) + */ + hcWriteDWord (usbBase, 0x00000001, HcCommandStatus); + for (i = 1000; i > 0; i--) { /* loop up to 10 seconds */ + udelay (10); + if (!(hcReadDWord (usbBase, HcCommandStatus) & 0x01)) + break; + } + + if (!i) + return; /* the controller doesn't responding. Broken? */ + /* + * OK. USB controller is ready. Initialize it in such way the later driver + * can us it (without any knowing about specific implementation) + */ + hcWriteDWord (usbBase, 0x00000000, HcControl); + /* + * disable all interrupt sources. Because we + * don't know where we come from (hard reset, cold start, soft reset...) + */ + hcWriteDWord (usbBase, 0x8000007D, HcInterruptDisable); + /* + * our current setup hardware configuration + * - every port power supply can switched indepently + * - every port can signal overcurrent + * - every port is "outside" and the devices are removeable + */ + hcWriteDWord (usbBase, 0x32000902, HcRhDescriptorA); + hcWriteDWord (usbBase, 0x00060000, HcRhDescriptorB); + /* + * don't forget to switch off power supply of each port + * The later running driver can reenable them to find and use + * the (maybe) connected devices. + * + */ + hcWriteDWord (usbBase, 0x00000200, HcRhPortStatus1); + hcWriteDWord (usbBase, 0x00000200, HcRhPortStatus2); + hcWriteWord (usbBase, 0x0428, HcHardwareConfiguration); + hcWriteWord (usbBase, 0x0040, HcDMAConfiguration); + hcWriteWord (usbBase, 0x0000, HcuPInterruptEnable); + hcWriteWord (usbBase, 0xA000 | (0x03 << 8) | 27, HcScratch); + /* + * controller is present and usable + */ + *cpldConfig |= USB_CHIP_ENABLE; + } + } +} +#endif + +#if defined(CONFIG_START_IDE) +int board_start_ide(void) +{ + if (IS_CAMERON) { + puts ("no IDE on cameron board.\n"); + return 0; + } + return 1; +} +#endif + +static int sc3_cameron_init (void) +{ + /* Set up the Memory Controller for the CAMERON version */ + mtebc (pb4ap, 0x01805940); + mtebc (pb4cr, 0x7401a000); + mtebc (pb5ap, 0x01805940); + mtebc (pb5cr, 0x7401a000); + mtebc (pb6ap, 0x0); + mtebc (pb6cr, 0x0); + mtebc (pb7ap, 0x0); + mtebc (pb7cr, 0x0); + return 0; +} + +void sc3_read_eeprom (void) +{ + uchar i2c_buffer[18]; + + i2c_read (0x50, 0x03, 1, i2c_buffer, 9); + i2c_buffer[9] = 0; + setenv ("serial#", (char *)i2c_buffer); + + /* read mac-address from eeprom */ + i2c_read (0x50, 0x11, 1, i2c_buffer, 15); + i2c_buffer[17] = 0; + i2c_buffer[16] = i2c_buffer[14]; + i2c_buffer[15] = i2c_buffer[13]; + i2c_buffer[14] = ':'; + i2c_buffer[13] = i2c_buffer[12]; + i2c_buffer[12] = i2c_buffer[11]; + i2c_buffer[11] = ':'; + i2c_buffer[8] = ':'; + i2c_buffer[5] = ':'; + i2c_buffer[2] = ':'; + setenv ("ethaddr", (char *)i2c_buffer); +} + +int board_early_init_f (void) +{ + /* write only register to configure things in our CPLD */ + unsigned char cpldConfig_1=0x00; + +/*-------------------------------------------------------------------------+ +| Interrupt controller setup for the SolidCard III CPU card (plus Evaluation board). +| +| Note: IRQ 0 UART 0, active high; level sensitive +| IRQ 1 UART 1, active high; level sensitive +| IRQ 2 IIC, active high; level sensitive +| IRQ 3 Ext. master, rising edge, edge sensitive +| IRQ 4 PCI, active high; level sensitive +| IRQ 5 DMA Channel 0, active high; level sensitive +| IRQ 6 DMA Channel 1, active high; level sensitive +| IRQ 7 DMA Channel 2, active high; level sensitive +| IRQ 8 DMA Channel 3, active high; level sensitive +| IRQ 9 Ethernet Wakeup, active high; level sensitive +| IRQ 10 MAL System Error (SERR), active high; level sensitive +| IRQ 11 MAL Tx End of Buffer, active high; level sensitive +| IRQ 12 MAL Rx End of Buffer, active high; level sensitive +| IRQ 13 MAL Tx Descriptor Error, active high; level sensitive +| IRQ 14 MAL Rx Descriptor Error, active high; level sensitive +| IRQ 15 Ethernet, active high; level sensitive +| IRQ 16 External PCI SERR, active high; level sensitive +| IRQ 17 ECC Correctable Error, active high; level sensitive +| IRQ 18 PCI Power Management, active high; level sensitive +| +| IRQ 19 (EXT IRQ7 405GPr only) +| IRQ 20 (EXT IRQ8 405GPr only) +| IRQ 21 (EXT IRQ9 405GPr only) +| IRQ 22 (EXT IRQ10 405GPr only) +| IRQ 23 (EXT IRQ11 405GPr only) +| IRQ 24 (EXT IRQ12 405GPr only) +| +| IRQ 25 (EXT IRQ 0) NAND-Flash R/B# (raising edge means flash is ready) +| IRQ 26 (EXT IRQ 1) IDE0 interrupt (x86 = IRQ14). Active high (edge sensitive) +| IRQ 27 (EXT IRQ 2) USB controller +| IRQ 28 (EXT IRQ 3) INT D, VGA; active low; level sensitive +| IRQ 29 (EXT IRQ 4) INT C, Ethernet; active low; level sensitive +| IRQ 30 (EXT IRQ 5) INT B, PC104+ SLOT; active low; level sensitive +| IRQ 31 (EXT IRQ 6) INT A, PC104+ SLOT; active low; level sensitive +| +| Direct Memory Access Controller Signal Polarities +| DRQ0 active high (like ISA) +| ACK0 active low (like ISA) +| EOT0 active high (like ISA) +| DRQ1 active high (like ISA) +| ACK1 active low (like ISA) +| EOT1 active high (like ISA) +| DRQ2 active high (like ISA) +| ACK2 active low (like ISA) +| EOT2 active high (like ISA) +| DRQ3 active high (like ISA) +| ACK3 active low (like ISA) +| EOT3 active high (like ISA) +| ++-------------------------------------------------------------------------*/ + + writeb (cpldConfig_1, CPLD_CONTROL_1); /* disable everything in CPLD */ + + mtdcr (uicsr, 0xFFFFFFFF); /* clear all ints */ + mtdcr (uicer, 0x00000000); /* disable all ints */ + mtdcr (uiccr, 0x00000000); /* set all to be non-critical */ + + if (IS_CAMERON) { + sc3_cameron_init(); + mtdcr (0x0B6, 0x18000000); + mtdcr (uicpr, 0xFFFFFFF0); + mtdcr (uictr, 0x10001030); + } else { + mtdcr (0x0B6, 0x0000000); + mtdcr (uicpr, 0xFFFFFFE0); + mtdcr (uictr, 0x10000020); + } + mtdcr (uicvcr, 0x00000001); /* set vect base=0,INT0 highest priority */ + mtdcr (uicsr, 0xFFFFFFFF); /* clear all ints */ + + /* setup other implementation specific details */ + mtdcr (ecr, 0x60606000); + + mtdcr (cntrl1, 0x000042C0); + + if (IS_CAMERON) { + mtdcr (cntrl0, 0x01380000); + /* Setup the GPIOs */ + writel (0x08008000, 0xEF600700); /* Output states */ + writel (0x00000000, 0xEF600718); /* Open Drain control */ + writel (0x68098000, 0xEF600704); /* Output control */ + } else { + mtdcr (cntrl0,0x00080000); + /* Setup the GPIOs */ + writel (0x08000000, 0xEF600700); /* Output states */ + writel (0x14000000, 0xEF600718); /* Open Drain control */ + writel (0x7C000000, 0xEF600704); /* Output control */ + } + + /* Code decompression disabled */ + mtdcr (kiar, kconf); + mtdcr (kidr, 0x2B); + + /* CPC0_ER: enable sleep mode of (currently) unused components */ + /* CPC0_FR: force unused components into sleep mode */ + mtdcr (cpmer, 0x3F800000); + mtdcr (cpmfr, 0x14000000); + + /* set PLB priority */ + mtdcr (0x87, 0x08000000); + + /* --------------- DMA stuff ------------------------------------- */ + mtdcr (0x126, 0x49200000); + +#ifndef IDE_USES_ISA_EMULATION + cpldConfig_1 |= IDE_BOOSTING; /* enable faster IDE */ + /* cpldConfig |= 0x01; */ /* enable 8.33MHz output, if *not* present on your baseboard */ + writeb (cpldConfig_1, CPLD_CONTROL_1); +#endif + +#ifdef CONFIG_ISP1161_PRESENT + initUsbHost (&cpldConfig_1); + writeb (cpldConfig_1, CPLD_CONTROL_1); +#endif + return(0); +} + +int misc_init_r (void) +{ + char *s1; + int i, xilinx_val; + volatile char *xilinx_adr; + xilinx_adr = (char *)0x79000102; + + *xilinx_adr = 0x00; + +/* customer settings ***************************************** */ +/* + s1 = getenv ("function"); + if (s1) { + if (!strcmp (s1, "Rosho")) { + printf ("function 'Rosho' activated\n"); + *xilinx_adr = 0x40; + } + else { + printf (">>>>>>>>>> function %s not recognized\n",s1); + } + } +*/ + +/* individual settings ***************************************** */ + if ((s1 = getenv ("xilinx"))) { + i=0; + xilinx_val = 0; + while (i < 3 && s1[i]) { + if (s1[i] >= '0' && s1[i] <= '9') + xilinx_val = (xilinx_val << 4) + s1[i] - '0'; + else + if (s1[i] >= 'A' && s1[i] <= 'F') + xilinx_val = (xilinx_val << 4) + s1[i] - 'A' + 10; + else + if (s1[i] >= 'a' && s1[i] <= 'f') + xilinx_val = (xilinx_val << 4) + s1[i] - 'a' + 10; + else { + xilinx_val = -1; + break; + } + i++; + } + if (xilinx_val >= 0 && xilinx_val <=255 && i < 3) { + printf ("Xilinx: set to %s\n", s1); + *xilinx_adr = (unsigned char) xilinx_val; + } else + printf ("Xilinx: rejected value %s\n", s1); + } + return 0; +} + +/* ------------------------------------------------------------------------- + * printCSConfig + * + * Print some informations about chips select configurations + * Only used while debugging. + * + * Params: + * - No. of CS pin + * - AP of this CS + * - CR of this CS + * + * Returns + * nothing + ------------------------------------------------------------------------- */ + +#ifdef SC3_DEBUGOUT +static void printCSConfig(int reg,unsigned long ap,unsigned long cr) +{ + const char *bsize[4] = {"8","16","32","?"}; + const unsigned char banks[8] = {1, 2, 4, 8, 16, 32, 64, 128}; + const char *bankaccess[4] = {"disabled", "RO", "WO", "RW"}; + +#define CYCLE 30 /* time of one clock (based on 33MHz) */ + + printf("\nCS#%d",reg); + if (!(cr & 0x00018000)) + puts(" unused"); + else { + if (((cr&0xFFF00000U) & ((banks[(cr & 0x000E0000) >> 17]-1) << 20))) + puts(" Address is not multiple of bank size!"); + + printf("\n -%s bit device", + bsize[(cr & 0x00006000) >> 13]); + printf(" at 0x%08lX", cr & 0xFFF00000U); + printf(" size: %u MB", banks[(cr & 0x000E0000) >> 17]); + printf(" rights: %s", bankaccess[(cr & 0x00018000) >> 15]); + if (ap & 0x80000000) { + printf("\n -Burst device (%luns/%luns)", + (((ap & 0x7C000000) >> 26) + 1) * CYCLE, + (((ap & 0x03800000) >> 23) + 1) * CYCLE); + } else { + printf("\n -Non burst device, active cycle %luns", + (((ap & 0x7F800000) >> 23) + 1) * CYCLE); + printf("\n -Address setup %luns", + ((ap & 0xC0000) >> 18) * CYCLE); + printf("\n -CS active to RD %luns/WR %luns", + ((ap & 0x30000) >> 16) * CYCLE, + ((ap & 0xC000) >> 14) * CYCLE); + printf("\n -WR to CS inactive %luns", + ((ap & 0x3000) >> 12) * CYCLE); + printf("\n -Hold after access %luns", + ((ap & 0xE00) >> 9) * CYCLE); + printf("\n -Ready is %sabled", + ap & 0x100 ? "en" : "dis"); + } + } +} +#endif + +#ifdef SC3_DEBUGOUT + +static unsigned int ap[] = {pb0ap, pb1ap, pb2ap, pb3ap, pb4ap, + pb5ap, pb6ap, pb7ap}; +static unsigned int cr[] = {pb0cr, pb1cr, pb2cr, pb3cr, pb4cr, + pb5cr, pb6cr, pb7cr}; + +static int show_reg (int nr) +{ + unsigned long ul1, ul2; + + mtdcr (ebccfga, ap[nr]); + ul1 = mfdcr (ebccfgd); + mtdcr (ebccfga, cr[nr]); + ul2 = mfdcr(ebccfgd); + printCSConfig(nr, ul1, ul2); + return 0; +} +#endif + +int checkboard (void) +{ +#ifdef SC3_DEBUGOUT + unsigned long ul1; + int i; + + for (i = 0; i < 8; i++) { + show_reg (i); + } + + mtdcr (ebccfga, epcr); + ul1 = mfdcr (ebccfgd); + + puts ("\nGeneral configuration:\n"); + + if (ul1 & 0x80000000) + printf(" -External Bus is always driven\n"); + + if (ul1 & 0x400000) + printf(" -CS signals are always driven\n"); + + if (ul1 & 0x20000) + printf(" -PowerDown after %lu clocks\n", + (ul1 & 0x1F000) >> 7); + + switch (ul1 & 0xC0000) + { + case 0xC0000: + printf(" -No external master present\n"); + break; + case 0x00000: + printf(" -8 bit external master present\n"); + break; + case 0x40000: + printf(" -16 bit external master present\n"); + break; + case 0x80000: + printf(" -32 bit external master present\n"); + break; + } + + switch (ul1 & 0x300000) + { + case 0x300000: + printf(" -Prefetch: Illegal setting!\n"); + break; + case 0x000000: + printf(" -1 doubleword prefetch\n"); + break; + case 0x100000: + printf(" -2 doublewords prefetch\n"); + break; + case 0x200000: + printf(" -4 doublewords prefetch\n"); + break; + } + putc ('\n'); +#endif + printf("Board: SolidCard III %s %s version.\n", + (IS_CAMERON ? "Cameron" : "Eurodesign"), CONFIG_SC3_VERSION); + return 0; +} + +static int printSDRAMConfig(char reg, unsigned long cr) +{ + const int bisize[8]={4, 8, 16, 32, 64, 128, 256, 0}; +#ifdef SC3_DEBUGOUT + const char *basize[8]= + {"4", "8", "16", "32", "64", "128", "256", "Reserved"}; + + printf("SDRAM bank %d",reg); + + if (!(cr & 0x01)) + puts(" disabled\n"); + else { + printf(" at 0x%08lX, size %s MB",cr & 0xFFC00000,basize[(cr&0xE0000)>>17]); + printf(" mode %lu\n",((cr & 0xE000)>>13)+1); + } +#endif + + if (cr & 0x01) + return(bisize[(cr & 0xE0000) >> 17]); + + return 0; +} + +#ifdef SC3_DEBUGOUT +static unsigned int mbcf[] = {mem_mb0cf, mem_mb1cf, mem_mb2cf, mem_mb3cf}; +#endif + +long int initdram (int board_type) +{ + unsigned int mems=0; + unsigned long ul1; + +#ifdef SC3_DEBUGOUT + unsigned long ul2; + int i; + + puts("\nSDRAM configuration:\n"); + + mtdcr (memcfga, mem_mcopt1); + ul1 = mfdcr(memcfgd); + + if (!(ul1 & 0x80000000)) { + puts(" Controller disabled\n"); + return 0; + } + for (i = 0; i < 4; i++) { + mtdcr (memcfga, mbcf[i]); + ul1 = mfdcr (memcfgd); + mems += printSDRAMConfig (i, ul1); + } + + mtdcr (memcfga, mem_sdtr1); + ul1 = mfdcr(memcfgd); + + printf ("Timing:\n -CAS latency %lu\n", ((ul1 & 0x1800000) >> 23)+1); + printf (" -Precharge %lu (PTA) \n", ((ul1 & 0xC0000) >> 18) + 1); + printf (" -R/W to Precharge %lu (CTP)\n", ((ul1 & 0x30000) >> 16) + 1); + printf (" -Leadoff %lu\n", ((ul1 & 0xC000) >> 14) + 1); + printf (" -CAS to RAS %lu\n", ((ul1 & 0x1C) >> 2) + 4); + printf (" -RAS to CAS %lu\n", ((ul1 & 0x3) + 1)); + puts ("Misc:\n"); + mtdcr (memcfga, mem_rtr); + ul1 = mfdcr(memcfgd); + printf (" -Refresh rate: %luns\n", (ul1 >> 16) * 7); + + mtdcr(memcfga,mem_pmit); + ul2=mfdcr(memcfgd); + + mtdcr(memcfga,mem_mcopt1); + ul1=mfdcr(memcfgd); + + if (ul1 & 0x20000000) + printf(" -Power Down after: %luns\n", + ((ul2 & 0xFFC00000) >> 22) * 7); + else + puts(" -Power Down disabled\n"); + + if (ul1 & 0x40000000) + printf(" -Self refresh feature active\n"); + else + puts(" -Self refresh disabled\n"); + + if (ul1 & 0x10000000) + puts(" -ECC enabled\n"); + else + puts(" -ECC disabled\n"); + + if (ul1 & 0x8000000) + puts(" -Using registered SDRAM\n"); + + if (!(ul1 & 0x6000000)) + puts(" -Using 32 bit data width\n"); + else + puts(" -Illegal data width!\n"); + + if (ul1 & 0x400000) + puts(" -ECC drivers inactive\n"); + else + puts(" -ECC drivers active\n"); + + if (ul1 & 0x200000) + puts(" -Memory lines always active outputs\n"); + else + puts(" -Memory lines only at write cycles active outputs\n"); + + mtdcr (memcfga, mem_status); + ul1 = mfdcr (memcfgd); + if (ul1 & 0x80000000) + puts(" -SDRAM Controller ready\n"); + else + puts(" -SDRAM Controller not ready\n"); + + if (ul1 & 0x4000000) + puts(" -SDRAM in self refresh mode!\n"); + + return (mems * 1024 * 1024); +#else + mtdcr (memcfga, mem_mb0cf); + ul1 = mfdcr (memcfgd); + mems = printSDRAMConfig (0, ul1); + + mtdcr (memcfga, mem_mb1cf); + ul1 = mfdcr (memcfgd); + mems += printSDRAMConfig (1, ul1); + + mtdcr (memcfga, mem_mb2cf); + ul1 = mfdcr(memcfgd); + mems += printSDRAMConfig (2, ul1); + + mtdcr (memcfga, mem_mb3cf); + ul1 = mfdcr(memcfgd); + mems += printSDRAMConfig (3, ul1); + + return (mems * 1024 * 1024); +#endif +} + +static void pci_solidcard3_fixup_irq (struct pci_controller *hose, pci_dev_t dev) +{ +/*-------------------------------------------------------------------------+ + | ,-. ,-. ,-. ,-. ,-. + | INTD# ----|B|-----|P|-. ,-|P|-. ,-| |-. ,-|G| + | |R| |C| \ / |C| \ / |E| \ / |r| + | INTC# ----|I|-----|1|-. `/---|1|-. `/---|t|-. `/---|a| + | |D| |0| \/ |0| \/ |h| \/ |f| + | INTB# ----|G|-----|4|-./`----|4|-./`----|e|-./`----|i| + | |E| |+| /\ |+| /\ |r| /\ |k| + | INTA# ----| |-----| |- `----| |- `----| |- `----| | + | `-' `-' `-' `-' `-' + | Slot 0 10 11 12 13 + | REQ# 0 1 2 * + | GNT# 0 1 2 * + +-------------------------------------------------------------------------*/ + unsigned char int_line = 0xff; + + switch (PCI_DEV(dev)) { + case 10: + int_line = 31; /* INT A */ + POST_OUT(0x42); + break; + + case 11: + int_line = 30; /* INT B */ + POST_OUT(0x43); + break; + + case 12: + int_line = 29; /* INT C */ + POST_OUT(0x44); + break; + + case 13: + int_line = 28; /* INT D */ + POST_OUT(0x45); + break; + } + pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, int_line); +} + +extern void pci_405gp_init(struct pci_controller *hose); +extern void pci_405gp_fixup_irq(struct pci_controller *hose, pci_dev_t dev); +extern void pci_405gp_setup_bridge(struct pci_controller *hose, pci_dev_t dev,struct pci_config_table *entry); +/* + * The following table is used when there is a special need to setup a PCI device. + * For every PCI device found in this table is called the given init function with given + * parameters. So never let all IDs at PCI_ANY_ID. In this case any found device gets the same + * parameters! + * +*/ +static struct pci_config_table pci_solidcard3_config_table[] = +{ +/* Host to PCI Bridge device (405GP) */ + { + vendor: 0x1014, + device: 0x0156, + class: PCI_CLASS_BRIDGE_HOST, + bus: 0, + dev: 0, + func: 0, + config_device: pci_405gp_setup_bridge + }, + { } +}; + +/*-------------------------------------------------------------------------+ + | pci_init_board (Called from pci_init() in drivers/pci.c) + | + | Init the PCI part of the SolidCard III + | + | Params: + * - Pointer to current PCI hose + * - Current Device + * + * Returns + * nothing + +-------------------------------------------------------------------------*/ + +void pci_init_board(void) +{ + POST_OUT(0x41); +/* + * we want the ptrs to RAM not flash (ie don't use init list) + */ + hose.fixup_irq = pci_solidcard3_fixup_irq; + hose.config_table = pci_solidcard3_config_table; + pci_405gp_init(&hose); +} diff --git a/board/solidcard3/solidcard3.h b/board/solidcard3/solidcard3.h new file mode 100644 index 00000000000..cf920f9f511 --- /dev/null +++ b/board/solidcard3/solidcard3.h @@ -0,0 +1,117 @@ +/* + * (C) Copyright 2000 + * 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 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 + */ + +/** + * hcWriteWord - write a 16 bit value into the USB controller + * @base: base address to access the chip registers + * @value: 16 bit value to write into register @offset + * @offset: register to write the @value into + * + */ +static void inline hcWriteWord (unsigned long base, unsigned int value, + unsigned int offset) +{ + out_le16 ((volatile u16*)(base + 2), offset | 0x80); + out_le16 ((volatile u16*)base, value); +} + +/** + * hcWriteDWord - write a 32 bit value into the USB controller + * @base: base address to access the chip registers + * @value: 32 bit value to write into register @offset + * @offset: register to write the @value into + * + */ + +static void inline hcWriteDWord (unsigned long base, unsigned long value, + unsigned int offset) +{ + out_le16 ((volatile u16*)(base + 2), offset | 0x80); + out_le16 ((volatile u16*)base, value); + out_le16 ((volatile u16*)base, value >> 16); +} + +/** + * hcReadWord - read a 16 bit value from the USB controller + * @base: base address to access the chip registers + * @offset: register to read from + * + * Returns the readed register value + */ + +static unsigned int inline hcReadWord (unsigned long base, unsigned int offset) +{ + out_le16 ((volatile u16*)(base + 2), offset); + return (in_le16 ((volatile u16*)base)); +} + +/** + * hcReadDWord - read a 32 bit value from the USB controller + * @base: base address to access the chip registers + * @offset: register to read from + * + * Returns the readed register value + */ + +static unsigned long inline hcReadDWord (unsigned long base, unsigned int offset) +{ + unsigned long val, val16; + + out_le16 ((volatile u16*)(base + 2), offset); + val = in_le16((volatile u16*)base); + val16 = in_le16((volatile u16*)base); + return (val | (val16 << 16)); +} + +/* control and status registers isp1161 */ +#define HcRevision 0x00 +#define HcControl 0x01 +#define HcCommandStatus 0x02 +#define HcInterruptStatus 0x03 +#define HcInterruptEnable 0x04 +#define HcInterruptDisable 0x05 +#define HcFmInterval 0x0D +#define HcFmRemaining 0x0E +#define HcFmNumber 0x0F +#define HcLSThreshold 0x11 +#define HcRhDescriptorA 0x12 +#define HcRhDescriptorB 0x13 +#define HcRhStatus 0x14 +#define HcRhPortStatus1 0x15 +#define HcRhPortStatus2 0x16 + +#define HcHardwareConfiguration 0x20 +#define HcDMAConfiguration 0x21 +#define HcTransferCounter 0x22 +#define HcuPInterrupt 0x24 +#define HcuPInterruptEnable 0x25 +#define HcChipID 0x27 +#define HcScratch 0x28 +#define HcSoftwareReset 0x29 +#define HcITLBufferLength 0x2A +#define HcATLBufferLength 0x2B +#define HcBufferStatus 0x2C +#define HcReadBackITL0Length 0x2D +#define HcReadBackITL1Length 0x2E +#define HcITLBufferPort 0x40 +#define HcATLBufferPort 0x41 diff --git a/board/solidcard3/u-boot.lds b/board/solidcard3/u-boot.lds new file mode 100644 index 00000000000..dcd560112c3 --- /dev/null +++ b/board/solidcard3/u-boot.lds @@ -0,0 +1,150 @@ +/* + * (C) Copyright 2000 + * 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 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 + */ + +OUTPUT_ARCH(powerpc) +SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib); +/* Do we need any of these for elf? + __DYNAMIC = 0; */ +SECTIONS +{ + .resetvec 0xFFFFFFFC : + { + *(.resetvec) + } = 0xffff + + /* Read-only sections, merged into text segment: */ + . = + SIZEOF_HEADERS; + .interp : { *(.interp) } + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .rel.text : { *(.rel.text) } + .rela.text : { *(.rela.text) } + .rel.data : { *(.rel.data) } + .rela.data : { *(.rela.data) } + .rel.rodata : { *(.rel.rodata) } + .rela.rodata : { *(.rela.rodata) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.bss : { *(.rel.bss) } + .rela.bss : { *(.rela.bss) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } + .init : { *(.init) } + .plt : { *(.plt) } + .text : + { + /* WARNING - the following is hand-optimized to fit within */ + /* the sector layout of our flash chips! XXX FIXME XXX */ + + cpu/ppc4xx/start.o (.text) + board/solidcard3/init.o (.text) + cpu/ppc4xx/kgdb.o (.text) + cpu/ppc4xx/traps.o (.text) + cpu/ppc4xx/interrupts.o (.text) + cpu/ppc4xx/serial.o (.text) + cpu/ppc4xx/cpu_init.o (.text) + cpu/ppc4xx/speed.o (.text) + common/dlmalloc.o (.text) + lib_generic/crc32.o (.text) + lib_ppc/extable.o (.text) + lib_generic/zlib.o (.text) + +/* . = env_offset;*/ +/* common/environment.o(.text)*/ + + *(.text) + *(.fixup) + *(.got1) + } + _etext = .; + PROVIDE (etext = .); + .rodata : + { + *(.rodata) + *(.rodata1) + *(.rodata.str1.4) + *(.eh_frame) + } + .fini : { *(.fini) } =0 + .ctors : { *(.ctors) } + .dtors : { *(.dtors) } + + /* Read-write section, merged into data segment: */ + . = (. + 0x00FF) & 0xFFFFFF00; + _erotext = .; + PROVIDE (erotext = .); + .reloc : + { + *(.got) + _GOT2_TABLE_ = .; + *(.got2) + _FIXUP_TABLE_ = .; + *(.fixup) + } + __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2; + __fixup_entries = (. - _FIXUP_TABLE_)>>2; + + .data : + { + *(.data) + *(.data1) + *(.sdata) + *(.sdata2) + *(.dynamic) + CONSTRUCTORS + } + _edata = .; + PROVIDE (edata = .); + + . = .; + __u_boot_cmd_start = .; + .u_boot_cmd : { *(.u_boot_cmd) } + __u_boot_cmd_end = .; + + __start___ex_table = .; + __ex_table : { *(__ex_table) } + __stop___ex_table = .; + + . = ALIGN(256); + __init_begin = .; + .text.init : { *(.text.init) } + .data.init : { *(.data.init) } + . = ALIGN(256); + __init_end = .; + + __bss_start = .; + .bss : + { + *(.sbss) *(.scommon) + *(.dynbss) + *(.bss) + *(COMMON) + } + _end = . ; + PROVIDE (end = .); +} diff --git a/cpu/ppc4xx/405gp_pci.c b/cpu/ppc4xx/405gp_pci.c index 9b711e2ebf1..38a1305d7f2 100644 --- a/cpu/ppc4xx/405gp_pci.c +++ b/cpu/ppc4xx/405gp_pci.c @@ -380,7 +380,7 @@ void pci_405gp_setup_vga(struct pci_controller *hose, pci_dev_t dev, pci_hose_write_config_dword(hose, dev, PCI_COMMAND, cmdstat); } -#if !(defined(CONFIG_PIP405) || defined (CONFIG_MIP405)) +#if !(defined(CONFIG_PIP405) || defined (CONFIG_MIP405)) || defined (CONFIG_SOLIDCARD3) /* *As is these functs get called out of flash Not a horrible @@ -406,6 +406,7 @@ static struct pci_controller hose = { config_table: pci_405gp_config_table, }; +#ifndef CONFIG_SOLIDCARD3 void pci_init_board(void) { /*we want the ptrs to RAM not flash (ie don't use init list)*/ @@ -413,6 +414,7 @@ void pci_init_board(void) hose.config_table = pci_405gp_config_table; pci_405gp_init(&hose); } +#endif #endif diff --git a/cpu/ppc4xx/cpu_init.c b/cpu/ppc4xx/cpu_init.c index 4b746b072ee..9e24b33f5a5 100644 --- a/cpu/ppc4xx/cpu_init.c +++ b/cpu/ppc4xx/cpu_init.c @@ -31,7 +31,6 @@ DECLARE_GLOBAL_DATA_PTR; #endif - #define mtebc(reg, data) mtdcr(ebccfga,reg);mtdcr(ebccfgd,data) #ifdef CFG_INIT_DCACHE_CS @@ -312,6 +311,10 @@ cpu_init_f (void) mtebc(pb7cr, CFG_EBC_PB7CR); #endif +#if defined (CONFIG_SOLIDCARD3) +mtebc(epcr, 0xb84ef000); +*(unsigned long *)0x79000080 = 0x0001; +#endif #if defined(CONFIG_WATCHDOG) unsigned long val; diff --git a/drivers/cfi_flash.c b/drivers/cfi_flash.c index 2699cce859a..8dc44997b8e 100644 --- a/drivers/cfi_flash.c +++ b/drivers/cfi_flash.c @@ -40,6 +40,10 @@ #include #ifdef CFG_FLASH_CFI_DRIVER +#if defined(CONFIG_SOLIDCARD3) +#define __LITTLE_ENDIAN +#endif + /* * This file implements a Common Flash Interface (CFI) driver for U-Boot. * The width of the port and the width of the chips are determined at initialization. @@ -867,7 +871,7 @@ static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c) cword->c = c; break; case FLASH_CFI_16BIT: -#if defined(__LITTLE_ENDIAN) +#if defined(__LITTLE_ENDIAN) && !defined(CONFIG_SOLIDCARD3) w = c; w <<= 8; cword->w = (cword->w >> 8) | w; @@ -1359,7 +1363,6 @@ static int flash_write_cfiword (flash_info_t * info, ulong dest, ctladdr.cp = flash_make_addr (info, 0, 0); cptr.cp = (uchar *) dest; - /* Check if Flash is (sufficiently) erased */ switch (info->portwidth) { case FLASH_CFI_8BIT: @@ -1531,4 +1534,9 @@ static int flash_write_cfibuffer (flash_info_t * info, ulong dest, uchar * cp, } } #endif /* CFG_FLASH_USE_BUFFER_WRITE */ + +#if defined(CONFIG_SOLIDCARD3) +#undef __LITTLE_ENDIAN +#endif + #endif /* CFG_FLASH_CFI */ diff --git a/include/configs/SOLIDCARD3.h b/include/configs/SOLIDCARD3.h new file mode 100644 index 00000000000..16e68b529f8 --- /dev/null +++ b/include/configs/SOLIDCARD3.h @@ -0,0 +1,537 @@ +/* + * (C) Copyright 2007 + * Heiko Schocher, DENX Software Engineering, . + * + * From: + * (C) Copyright 2003 + * Juergen Beisert, EuroDesign embedded technologies, jbeisert@eurodsn.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 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 __CONFIG_H +#define __CONFIG_H + +#undef USE_VGA_GRAPHICS + +/* Memory Map +0x00000000 .... 0x03FFFFFF -> RAM (up to 128MiB) +0x74000000 .... 0x740FFFFF -> CS#6 +0x74100000 .... 0x741FFFFF -> CS#7 +0x74200000 .... 0x742FFFFF -> CS4# if no internal USB +0x74300000 .... 0x743FFFFF -> CS5# if no boosted IDE +0x77C00000 .... 0x77CFFFFF -> CS4# USB HC (1 MiB) +0x77D00000 .... 0x77DFFFFF -> CS1# NAND-Flash (1 MiB) +0x78000000 .... 0x78FFFFFF -> CS2# ISA-Bus Speicherzugriff (16 MiB) +0x79000000 .... 0x7900FFFF -> CS2# ISA-Bus IO-Zugriff (16 MiB, mapped: 64kiB) +0x79010000 .... 0x79FFFFFF -> CS2# ISA-Bus IO-Zugriff (mirrored) +0x7A000000 .... 0x7A0FFFFF -> CS5# IDE emulation (1MiB) + +0x80000000 .... 0x9FFFFFFF -> PCI-Bus Speicherzugriff (512MiB, mapped: 1:1) +0xA0000000 .... 0xBFFFFFFF -> PCI-Bus Speicherzugriff (512MiB, mapped: 0x00000000...0x1FFFFFFF) +0xE8000000 .... 0xE800FFFF -> PCI-Bus IO-Zugriff (64kiB, translated to PCI: 0x0000...0xFFFF) +0xE8800000 .... 0xEBFFFFFF -> PCI-Bus IO-Zugriff (56MiB, translated to PCI: 0x00800000...0x3FFFFFF) +0xEED00000 .... 0xEED00003 -> PCI-Bus +0xEF400000 .... 0xEF40003F -> PCI-Bus Local Configuration Registers +0xEF40003F .... 0xEF5FFFFF -> reserved +0xEF600000 .... 0xEFFFFFFF -> 405GP internal Devices (10 MiB) +0xF0000000 .... 0xF01FFFFF -> Flash-ROM (2 MiB) +0xF0200000 .... 0xF7FFFFFF -> free for flash devices +0xF8000000 .... 0xF8000FFF -> OnChipMemory (4kiB) +0xF8001000 .... 0xFFDFFFFF -> free for flash devices +0xFFE00000 .... 0xFFFFFFFF -> BOOT-ROM (2 MiB) +*/ + +#define CONFIG_SOLIDCARD3 1 +#define CONFIG_4xx 1 +#define CONFIG_405GP 1 + +#define CONFIG_BOARD_EARLY_INIT_F 1 + +/* + * define IDE_USES_ISA_EMULATION for slower IDE access in the ISA-IO address range + * If undefed, IDE access uses a seperat emulation with higher access speed + * Consider to inform your Linux IDE driver about the different addresses! + * IDE_USES_ISA_EMULATION is only used if your CONFIG_COMMANDS macro includes the CFG_CMD_IDE macro! + */ +#define IDE_USES_ISA_EMULATION + +/*----------------------------------------------------------------------- + * Serial Port + *----------------------------------------------------------------------*/ +#define CONFIG_SERIAL_MULTI +#undef CONFIG_SERIAL_SOFTWARE_FIFO +/* + * define CONFIG_POWER_DOWN if your cpu should power down while waiting for your input + * Works only, if you have enabled the CONFIG_SERIAL_SOFTWARE_FIFO feature + */ +#if CONFIG_SERIAL_SOFTWARE_FIFO + #define CONFIG_POWER_DOWN +#endif + +/* + * define CONFIG_SYS_CLK_FREQ to your base crystal clock in Hz + */ +#define CONFIG_SYS_CLK_FREQ 33333333 + +/* + * define CONFIG_BAUDRATE to the baudrate value you want to use as default + */ +#define CONFIG_BAUDRATE 115200 +#define CONFIG_BOOTDELAY 3 /* autoboot after 3 seconds */ + +#define CONFIG_SILENT_CONSOLE 1 /* enable silent startup */ +#define CFG_DEVICE_NULLDEV 1 /* include nulldev device */ + +#if 1 /* feel free to disable for development */ +#define CONFIG_AUTOBOOT_KEYED /* Enable password protection */ +#define CONFIG_AUTOBOOT_PROMPT "\nSC3 - booting... stop with S\n" +#define CONFIG_AUTOBOOT_DELAY_STR "S" /* 1st "password" */ +#endif + +/* + * define CONFIG_BOOTCOMMAND to the autoboot commands. They will running after + * the CONFIG_BOOTDELAY delay to boot your machine + */ +#define CONFIG_BOOTCOMMAND "bootp;dcache on;bootm" + +/* + * define CONFIG_BOOTARGS to the default kernel parameters. They will used if you don't + * set different values at the u-boot prompt + */ +#ifdef USE_VGA_GRAPHICS + #define CONFIG_BOOTARGS "root=/dev/nfs rw ip=bootp nfsroot=/tftpboot/solidcard3re" +#else + #define CONFIG_BOOTARGS "console=ttyS0,115200 root=/dev/nfs rw ip=bootp" +#endif +/* + * Is the USB host controller assembled? If yes define CONFIG_ISP1161_PRESENT + * This reserves memory bank #4 for this purpose + */ +#undef CONFIG_ISP1161_PRESENT + +#undef CONFIG_LOADS_ECHO /* no echo on for serial download */ +#define CFG_LOADS_BAUD_CHANGE 1 /* allow baudrate change */ + +#define CONFIG_NET_MULTI +/* #define CONFIG_EEPRO100_SROM_WRITE */ +/* #define CONFIG_SHOW_MAC */ +#define CONFIG_EEPRO100 +#define CONFIG_MII 1 /* add 405GP MII PHY management */ +#define CONFIG_PHY_ADDR 1 /* the connected Phy defaults to address 1 */ + +#define CONFIG_COMMANDS \ + (CONFIG_CMD_DFL | \ + CFG_CMD_PCI | \ + CFG_CMD_IRQ | \ + CFG_CMD_NET | \ + CFG_CMD_MII | \ + CFG_CMD_PING | \ + CFG_CMD_NAND | \ + CFG_CMD_I2C | \ + CFG_CMD_IDE | \ + CFG_CMD_DATE | \ + CFG_CMD_DHCP | \ + CFG_CMD_CACHE | \ + CFG_CMD_ELF ) + +/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ +#include + +#undef CONFIG_WATCHDOG /* watchdog disabled */ + +/* + * Miscellaneous configurable options + */ +#define CFG_LONGHELP 1 /* undef to save memory */ +#define CFG_PROMPT "SC3> " /* Monitor Command Prompt */ +#define CFG_CBSIZE 256 /* Console I/O Buffer Size */ + +#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ + +#define CFG_MAXARGS 16 /* max number of command args */ +#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ + +#define CFG_MEMTEST_START 0x0400000 /* memtest works on */ +#define CFG_MEMTEST_END 0x0C00000 /* 4 ... 12 MB in DRAM */ + +/* + * If CFG_EXT_SERIAL_CLOCK, then the UART divisor is 1. + * If CFG_405_UART_ERRATA_59, then UART divisor is 31. + * Otherwise, UART divisor is determined by CPU Clock and CFG_BASE_BAUD value. + * The Linux BASE_BAUD define should match this configuration. + * baseBaud = cpuClock/(uartDivisor*16) + * If CFG_405_UART_ERRATA_59 and 200MHz CPU clock, + * set Linux BASE_BAUD to 403200. + * + * Consider the OPB clock! If it get lower the BASE_BAUD must be lower to + * (see 405GP datasheet for descritpion) + */ +#undef CFG_EXT_SERIAL_CLOCK /* external serial clock */ +#undef CFG_405_UART_ERRATA_59 /* 405GP/CR Rev. D silicon */ +#define CFG_BASE_BAUD 921600 /* internal clock */ + +/* The following table includes the supported baudrates */ +#define CFG_BAUDRATE_TABLE \ + {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400} + +#define CFG_LOAD_ADDR 0x1000000 /* default load address */ +#define CFG_EXTBDINFO 1 /* To use extended board_into (bd_t) */ + +#define CFG_HZ 1000 /* decrementer freq: 1 ms ticks */ + +/*----------------------------------------------------------------------- + * IIC stuff + *----------------------------------------------------------------------- + */ +#define CONFIG_HARD_I2C /* I2C with hardware support */ +#undef CONFIG_SOFT_I2C /* I2C bit-banged */ + +#define I2C_INIT +#define I2C_ACTIVE 0 +#define I2C_TRISTATE 0 + +#define CFG_I2C_SPEED 100000 /* use the standard 100kHz speed */ +#define CFG_I2C_SLAVE 0x7F /* mask valid bits */ + +#define CONFIG_RTC_DS1337 +#define CFG_I2C_RTC_ADDR 0x68 + +/*----------------------------------------------------------------------- + * PCI stuff + *----------------------------------------------------------------------- + */ +#define PCI_HOST_ADAPTER 0 /* configure ar pci adapter */ +#define PCI_HOST_FORCE 1 /* configure as pci host */ +#define PCI_HOST_AUTO 2 /* detected via arbiter enable */ + +#define CONFIG_PCI /* include pci support */ +#define CONFIG_PCI_HOST PCI_HOST_FORCE /* select pci host function */ +#define CONFIG_PCI_PNP /* do pci plug-and-play */ + /* resource configuration */ + +/* If you want to see, whats connected to your PCI bus */ +/* #define CONFIG_PCI_SCAN_SHOW */ + +#define CFG_PCI_SUBSYS_VENDORID 0x0000 /* PCI Vendor ID: to-do!!! */ +#define CFG_PCI_SUBSYS_DEVICEID 0x0000 /* PCI Device ID: to-do!!! */ +#define CFG_PCI_PTM1LA 0x00000000 /* point to sdram */ +#define CFG_PCI_PTM1MS 0x80000001 /* 2GB, enable hard-wired to 1 */ +#define CFG_PCI_PTM1PCI 0x00000000 /* Host: use this pci address */ +#define CFG_PCI_PTM2LA 0x00000000 /* disabled */ +#define CFG_PCI_PTM2MS 0x00000000 /* disabled */ +#define CFG_PCI_PTM2PCI 0x04000000 /* Host: use this pci address */ + +/*----------------------------------------------------------------------- + * External peripheral base address + *----------------------------------------------------------------------- + */ +#if !(CONFIG_COMMANDS & CFG_CMD_IDE) + +#undef CONFIG_IDE_LED /* no led for ide supported */ +#undef CONFIG_IDE_RESET /* no reset for ide supported */ + +/*----------------------------------------------------------------------- + * IDE/ATA stuff + *----------------------------------------------------------------------- + */ +#else /* !(CONFIG_COMMANDS & CFG_CMD_IDE) */ +#define CONFIG_START_IDE 1 /* check, if use IDE */ + +#undef CONFIG_IDE_8xx_DIRECT /* no pcmcia interface required */ +#undef CONFIG_IDE_LED /* no led for ide supported */ +#undef CONFIG_IDE_RESET /* no reset for ide supported */ + +#define CONFIG_ATAPI +#define CONFIG_DOS_PARTITION +#define CFG_IDE_MAXDEVICE (CFG_IDE_MAXBUS*1) /* max. 1 drives per IDE bus */ + +#ifndef IDE_USES_ISA_EMULATION + +/* New and faster access */ +#define CFG_ATA_BASE_ADDR 0x7A000000 /* start of ISA IO emulation */ + +/* How many IDE busses are available */ +#define CFG_IDE_MAXBUS 1 + +/* What IDE ports are available */ +#define CFG_ATA_IDE0_OFFSET 0x000 /* first is available */ +#undef CFG_ATA_IDE1_OFFSET /* second not available */ + +/* access to the data port is calculated: + CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_DATA_OFFSET + 0 */ +#define CFG_ATA_DATA_OFFSET 0x0000 /* Offset for data I/O */ + +/* access to the registers is calculated: + CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_REG_OFFSET + [1..7] */ +#define CFG_ATA_REG_OFFSET 0x0000 /* Offset for normal register accesses */ + +/* access to the alternate register is calculated: + CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_ALT_OFFSET + 6 */ +#define CFG_ATA_ALT_OFFSET 0x008 /* Offset for alternate registers */ + +#else /* IDE_USES_ISA_EMULATION */ + +#define CFG_ATA_BASE_ADDR 0x79000000 /* start of ISA IO emulation */ + +/* How many IDE busses are available */ +#define CFG_IDE_MAXBUS 1 + +/* What IDE ports are available */ +#define CFG_ATA_IDE0_OFFSET 0x01F0 /* first is available */ +#undef CFG_ATA_IDE1_OFFSET /* second not available */ + +/* access to the data port is calculated: + CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_DATA_OFFSET + 0 */ +#define CFG_ATA_DATA_OFFSET 0x0000 /* Offset for data I/O */ + +/* access to the registers is calculated: + CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_REG_OFFSET + [1..7] */ +#define CFG_ATA_REG_OFFSET 0x0000 /* Offset for normal register accesses */ + +/* access to the alternate register is calculated: + CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_ALT_OFFSET + 6 */ +#define CFG_ATA_ALT_OFFSET 0x03F0 /* Offset for alternate registers */ + +#endif /* IDE_USES_ISA_EMULATION */ + +#endif /* !(CONFIG_COMMANDS & CFG_CMD_IDE) */ + +/* +#define CFG_KEY_REG_BASE_ADDR 0xF0100000 +#define CFG_IR_REG_BASE_ADDR 0xF0200000 +#define CFG_FPGA_REG_BASE_ADDR 0xF0300000 +*/ + +/*----------------------------------------------------------------------- + * Start addresses for the final memory configuration + * (Set up by the startup code) + * Please note that CFG_SDRAM_BASE _must_ start at 0 + * + * CFG_FLASH_BASE -> start address of internal flash + * CFG_MONITOR_BASE -> start of u-boot + */ +#ifndef __ASSEMBLER__ +extern unsigned long offsetOfBigFlash; +extern unsigned long offsetOfEnvironment; +#endif + +#define CFG_SDRAM_BASE 0x00000000 +#define CFG_FLASH_BASE 0xFFE00000 +#define CFG_MONITOR_BASE 0xFFFC0000 /* placed last 256k */ +#define CFG_MONITOR_LEN (224 * 1024) /* Reserve 224 KiB for Monitor */ +#define CFG_MALLOC_LEN (128 * 1024) /* Reserve 128 KiB for malloc() */ + +/* + * For booting Linux, the board info and command line data + * have to be in the first 8 MiB of memory, since this is + * the maximum mapped by the Linux kernel during initialization. + */ +#define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */ +/*----------------------------------------------------------------------- + * FLASH organization // FIXME: lookup in datasheet + */ +#define CFG_MAX_FLASH_BANKS 2 /* max number of memory banks */ +#define CFG_MAX_FLASH_SECT 256 /* max number of sectors on one chip */ + +#define CFG_FLASH_CFI /* flash is CFI compat. */ +#define CFG_FLASH_CFI_DRIVER /* Use common CFI driver*/ +#define CFG_FLASH_EMPTY_INFO /* print 'E' for empty sector */ +#define CFG_FLASH_QUIET_TEST 1 /* don't warn upon unknown flash*/ +#define CFG_FLASH_ERASE_TOUT 120000 /* Timeout for Flash Erase (in ms) */ +#define CFG_FLASH_WRITE_TOUT 500 /* Timeout for Flash Write (in ms) */ + +#define CFG_ENV_IS_IN_FLASH 1 +#if CFG_ENV_IS_IN_FLASH + #define CFG_ENV_OFFSET 0x00000000 /* Offset of Environment Sector in bottom type */ + #define CFG_ENV_SIZE 0x4000 /* Total Size of Environment Sector */ + #define CFG_ENV_SECT_SIZE 0x4000 /* see README - env sector total size */ +#endif +/* let us changing anything in our environment */ +#define CONFIG_ENV_OVERWRITE + +/* + * NAND-FLASH stuff + */ +#define CFG_MAX_NAND_DEVICE 1 +#define NAND_MAX_CHIPS 1 +#define CFG_NAND_BASE 0x77D00000 + +/*----------------------------------------------------------------------- + * Cache Configuration + * + * CFG_DCACHE_SIZE -> size of data cache: + * - 405GP 8k + * - 405GPr 16k + * How to handle the difference in chache size? + * CFG_CACHELINE_SIZE -> size of one cache line: 32 bytes + * (used in cpu/ppc4xx/start.S) +*/ +#define CFG_DCACHE_SIZE 16384 + +#define CFG_CACHELINE_SIZE 32 + +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) + #define CFG_CACHELINE_SHIFT 5 /* log base 2 of the above value */ +#endif + +/* + * Init Memory Controller: + * + */ + +#define FLASH_BASE0_PRELIM CFG_FLASH_BASE +#define FLASH_BASE1_PRELIM 0 + +/*----------------------------------------------------------------------- + * Some informations about the internal SRAM (OCM=On Chip Memory) + * + * CFG_OCM_DATA_ADDR -> location + * CFG_OCM_DATA_SIZE -> size +*/ + +#define CFG_TEMP_STACK_OCM 1 +#define CFG_OCM_DATA_ADDR 0xF8000000 +#define CFG_OCM_DATA_SIZE 0x1000 + +/*----------------------------------------------------------------------- + * Definitions for initial stack pointer and data area (in DPRAM): + * - we are using the internal 4k SRAM, so we don't need data cache mapping + * - internal SRAM (OCM=On Chip Memory) is placed to CFG_OCM_DATA_ADDR + * - Stackpointer will be located to + * (CFG_INIT_RAM_ADDR&0xFFFF0000) | (CFG_INIT_SP_OFFSET&0x0000FFFF) + * in cpu/ppc4xx/start.S + */ + +#undef CFG_INIT_DCACHE_CS +/* Where the internal SRAM starts */ +#define CFG_INIT_RAM_ADDR CFG_OCM_DATA_ADDR +/* Where the internal SRAM ends (only offset) */ +#define CFG_INIT_RAM_END 0x0F00 + +/* + + CFG_INIT_RAM_ADDR ------> ------------ lower address + | | + | ^ | + | | | + | | Stack | + CFG_GBL_DATA_OFFSET ----> ------------ + | | + | 64 Bytes | + | | + CFG_INIT_RAM_END ------> ------------ higher address + (offset only) + +*/ +/* size in bytes reserved for initial data */ +#define CFG_GBL_DATA_SIZE 64 +#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) +/* Initial value of the stack pointern in internal SRAM */ +#define CFG_INIT_SP_OFFSET CFG_GBL_DATA_OFFSET + +/* + * Internal Definitions + * + * Boot Flags + */ +#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */ +#define BOOTFLAG_WARM 0x02 /* Software reboot */ + +/* ################################################################################### */ +/* These defines will be used in cpu/ppc4xx/cpu_init.c to setup external chip selects */ +/* They are currently undefined cause they are initiaized in board/solidcard3/init.S */ + +/* This chip select accesses the boot device */ +/* It depends on boot select switch if this device is 16 or 8 bit */ + +#undef CFG_EBC_PB0AP +#undef CFG_EBC_PB0CR + +#undef CFG_EBC_PB1AP +#undef CFG_EBC_PB1CR + +#undef CFG_EBC_PB2AP +#undef CFG_EBC_PB2CR + +#undef CFG_EBC_PB3AP +#undef CFG_EBC_PB3CR + +#undef CFG_EBC_PB4AP +#undef CFG_EBC_PB4CR + +#undef CFG_EBC_PB5AP +#undef CFG_EBC_PB5CR + +#undef CFG_EBC_PB6AP +#undef CFG_EBC_PB6CR + +#undef CFG_EBC_PB7AP +#undef CFG_EBC_PB7CR + +#define CONFIG_SDRAM_BANK0 /* use the standard SDRAM initialization */ +#undef CONFIG_SPD_EEPROM + +/* + * Define this to get more information about system configuration + */ +/* #define SC3_DEBUGOUT */ +#undef SC3_DEBUGOUT + +/*********************************************************************** + * External peripheral base address + ***********************************************************************/ + +#define CFG_ISA_MEM_BASE_ADDRESS 0x78000000 +/* + Die Grafik-Treiber greifen über die Adresse in diesem Macro auf den Chip zu. + Das funktioniert bei deren Karten, weil sie eine PCI-Bridge benutzen, die + das gleiche Mapping durchführen kann, wie der SC520 (also Aufteilen von IO-Zugriffen + auf ISA- und PCI-Zyklen) + */ +#define CFG_ISA_IO_BASE_ADDRESS 0xE8000000 +/*#define CFG_ISA_IO_BASE_ADDRESS 0x79000000 */ + +/************************************************************ + * Video support + ************************************************************/ + +#ifdef USE_VGA_GRAPHICS +#define CONFIG_VIDEO /* To enable video controller support */ +#define CONFIG_VIDEO_CT69000 +#define CONFIG_CFB_CONSOLE +/* #define CONFIG_VIDEO_LOGO */ +#define CONFIG_VGA_AS_SINGLE_DEVICE +#define CONFIG_VIDEO_SW_CURSOR +/* #define CONFIG_VIDEO_HW_CURSOR */ +#define CONFIG_VIDEO_ONBOARD /* Video controller is on-board */ + +#define VIDEO_HW_RECTFILL +#define VIDEO_HW_BITBLT + +#endif + +/************************************************************ + * Ident + ************************************************************/ +#define CONFIG_SC3_VERSION "r1.4" + +#define POST_OUT(x) (*((volatile unsigned char*)(0x79000080))=x) + +#endif /* __CONFIG_H */ diff --git a/include/ppc405.h b/include/ppc405.h index 44702400e00..e475fa54cdf 100644 --- a/include/ppc405.h +++ b/include/ppc405.h @@ -160,6 +160,7 @@ #define mem_bear 0x10 /* bus error address reg */ #endif #define mem_mcopt1 0x20 /* memory controller options 1 */ + #define mem_status 0x24 /* memory status */ #define mem_rtr 0x30 /* refresh timer reg */ #define mem_pmit 0x34 /* power management idle timer */ #define mem_mb0cf 0x40 /* memory bank 0 configuration */ diff --git a/lib_ppc/board.c b/lib_ppc/board.c index f4241219629..24e8e970b36 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -76,6 +76,10 @@ extern int update_flash_size (int flash_size); #endif +#if defined(CONFIG_SOLIDCARD3) +extern void sc3_read_eeprom(void); +#endif + #if (CONFIG_COMMANDS & CFG_CMD_DOC) void doc_init (void); #endif @@ -93,6 +97,9 @@ static char *failed = "*** failed ***\n"; extern flash_info_t flash_info[]; #endif +#if defined(CONFIG_START_IDE) +extern int board_start_ide(void); +#endif #include DECLARE_GLOBAL_DATA_PTR; @@ -815,6 +822,9 @@ void board_init_r (gd_t *id, ulong dest_addr) #endif /* CONFIG_405GP, CONFIG_405EP */ #endif /* CFG_EXTBDINFO */ +#if defined(CONFIG_SOLIDCARD3) + sc3_read_eeprom(); +#endif s = getenv ("ethaddr"); #if defined (CONFIG_MBX) || \ defined (CONFIG_RPXCLASSIC) || \ @@ -921,6 +931,7 @@ void board_init_r (gd_t *id, ulong dest_addr) defined(CONFIG_KUP4X) || \ defined(CONFIG_LWMON) || \ defined(CONFIG_PCU_E) || \ + defined(CONFIG_SOLIDCARD3) || \ defined(CONFIG_W7O) || \ defined(CONFIG_MISC_INIT_R) /* miscellaneous platform dependent initialisations */ @@ -1030,7 +1041,12 @@ void board_init_r (gd_t *id, ulong dest_addr) # else puts ("IDE: "); #endif +#if defined(CONFIG_START_IDE) + if (board_start_ide()) + ide_init (); +#else ide_init (); +#endif #endif /* CFG_CMD_IDE */ #ifdef CONFIG_LAST_STAGE_INIT -- cgit v1.3.1 From 36adff362c2c0141ff8a810d42a7e478f779130f Mon Sep 17 00:00:00 2001 From: Stefan Roese Date: Sat, 13 Jan 2007 07:59:19 +0100 Subject: [PATCH] Update Yosemite (440EP) to display board rev and PCI bus speed Now the board revision and the current PCI bus speed are printed after the board message. Also the EBC initialising is now done via defines in the board config file. Signed-off-by: Stefan Roese --- board/amcc/yosemite/yosemite.c | 25 +++++++------------------ include/configs/yosemite.h | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 18 deletions(-) (limited to 'include') diff --git a/board/amcc/yosemite/yosemite.c b/board/amcc/yosemite/yosemite.c index 588ee900dad..d47219cb6f8 100644 --- a/board/amcc/yosemite/yosemite.c +++ b/board/amcc/yosemite/yosemite.c @@ -39,24 +39,6 @@ int board_early_init_f(void) reg = mfdcr(ebccfgd); mtdcr(ebccfgd, reg | 0x04000000); /* Set ATC */ - mtebc(pb0ap, 0x03017300); /* FLASH/SRAM */ - mtebc(pb0cr, 0xfc0da000); /* BAS=0xfc0 64MB r/w 16-bit */ - - mtebc(pb1ap, 0x00000000); - mtebc(pb1cr, 0x00000000); - - mtebc(pb2ap, 0x04814500); - /*CPLD*/ mtebc(pb2cr, 0x80018000); /*BAS=0x800 1MB r/w 8-bit */ - - mtebc(pb3ap, 0x00000000); - mtebc(pb3cr, 0x00000000); - - mtebc(pb4ap, 0x00000000); - mtebc(pb4cr, 0x00000000); - - mtebc(pb5ap, 0x00000000); - mtebc(pb5cr, 0x00000000); - /*-------------------------------------------------------------------- * Setup the GPIO pins *-------------------------------------------------------------------*/ @@ -186,8 +168,15 @@ int misc_init_r (void) int checkboard(void) { char *s = getenv("serial#"); + u8 rev; + u8 val; printf("Board: Yosemite - AMCC PPC440EP Evaluation Board"); + + rev = *(u8 *)(CFG_CPLD + 0); + val = *(u8 *)(CFG_CPLD + 5) & 0x01; + printf(", Rev. %X, PCI=%d MHz", rev, val ? 66 : 33); + if (s != NULL) { puts(", serial# "); puts(s); diff --git a/include/configs/yosemite.h b/include/configs/yosemite.h index 6e942abcaae..2cc18db9a50 100644 --- a/include/configs/yosemite.h +++ b/include/configs/yosemite.h @@ -306,6 +306,20 @@ */ #define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */ +/*----------------------------------------------------------------------- + * External Bus Controller (EBC) Setup + *----------------------------------------------------------------------*/ +#define CFG_FLASH CFG_FLASH_BASE +#define CFG_CPLD 0x80000000 + +/* Memory Bank 0 (NOR-FLASH) initialization */ +#define CFG_EBC_PB0AP 0x03017300 +#define CFG_EBC_PB0CR (CFG_FLASH | 0xda000) + +/* Memory Bank 2 (CPLD) initialization */ +#define CFG_EBC_PB2AP 0x04814500 +#define CFG_EBC_PB2CR (CFG_CPLD | 0x18000) + /*----------------------------------------------------------------------- * Cache Configuration */ -- cgit v1.3.1 From 77ddc5b9afb325262fd88752ba430a1dded1f0c7 Mon Sep 17 00:00:00 2001 From: Stefan Roese Date: Sat, 13 Jan 2007 07:59:56 +0100 Subject: [PATCH] Update Yellowstone (440GR) to display board rev and PCI bus speed Now the board revision and the current PCI bus speed are printed after the board message. Also the EBC initialising is now done via defines in the board config file. Signed-off-by: Stefan Roese --- board/amcc/yellowstone/yellowstone.c | 25 +++++++------------------ include/configs/yellowstone.h | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 18 deletions(-) (limited to 'include') diff --git a/board/amcc/yellowstone/yellowstone.c b/board/amcc/yellowstone/yellowstone.c index 754ae449c13..04f58e04191 100644 --- a/board/amcc/yellowstone/yellowstone.c +++ b/board/amcc/yellowstone/yellowstone.c @@ -39,24 +39,6 @@ int board_early_init_f(void) reg = mfdcr(ebccfgd); mtdcr(ebccfgd, reg | 0x04000000); /* Set ATC */ - mtebc(pb0ap, 0x03017300); /* FLASH/SRAM */ - mtebc(pb0cr, 0xfc0da000); /* BAS=0xfc0 64MB r/w 16-bit */ - - mtebc(pb1ap, 0x00000000); - mtebc(pb1cr, 0x00000000); - - mtebc(pb2ap, 0x04814500); - /*CPLD*/ mtebc(pb2cr, 0x80018000); /*BAS=0x800 1MB r/w 8-bit */ - - mtebc(pb3ap, 0x00000000); - mtebc(pb3cr, 0x00000000); - - mtebc(pb4ap, 0x00000000); - mtebc(pb4cr, 0x00000000); - - mtebc(pb5ap, 0x00000000); - mtebc(pb5cr, 0x00000000); - /*-------------------------------------------------------------------- * Setup the GPIO pins *-------------------------------------------------------------------*/ @@ -190,8 +172,15 @@ int misc_init_r (void) int checkboard(void) { char *s = getenv("serial#"); + u8 rev; + u8 val; printf("Board: Yellowstone - AMCC PPC440GR Evaluation Board"); + + rev = *(u8 *)(CFG_CPLD + 0); + val = *(u8 *)(CFG_CPLD + 5) & 0x01; + printf(", Rev. %X, PCI=%d MHz", rev, val ? 66 : 33); + if (s != NULL) { puts(", serial# "); puts(s); diff --git a/include/configs/yellowstone.h b/include/configs/yellowstone.h index 58717f8a60c..911a52dbcfa 100644 --- a/include/configs/yellowstone.h +++ b/include/configs/yellowstone.h @@ -301,6 +301,20 @@ */ #define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */ +/*----------------------------------------------------------------------- + * External Bus Controller (EBC) Setup + *----------------------------------------------------------------------*/ +#define CFG_FLASH CFG_FLASH_BASE +#define CFG_CPLD 0x80000000 + +/* Memory Bank 0 (NOR-FLASH) initialization */ +#define CFG_EBC_PB0AP 0x03017300 +#define CFG_EBC_PB0CR (CFG_FLASH | 0xda000) + +/* Memory Bank 2 (CPLD) initialization */ +#define CFG_EBC_PB2AP 0x04814500 +#define CFG_EBC_PB2CR (CFG_CPLD | 0x18000) + /*----------------------------------------------------------------------- * Cache Configuration */ -- cgit v1.3.1 From 95981778cff0038fd9941044d6a3eda810e33258 Mon Sep 17 00:00:00 2001 From: Stefan Roese Date: Sat, 13 Jan 2007 08:01:03 +0100 Subject: [PATCH] Update 440SP(e) cpu revisions Also display enabled/disabled RAID 6 support for 440SP/440SPe PPC's. Signed-off-by: Stefan Roese --- cpu/ppc4xx/cpu.c | 28 ++++++++++++++++++++++++---- include/asm-ppc/processor.h | 13 ++++++++----- 2 files changed, 32 insertions(+), 9 deletions(-) (limited to 'include') diff --git a/cpu/ppc4xx/cpu.c b/cpu/ppc4xx/cpu.c index 9c5c9109b19..53da5a3e76a 100644 --- a/cpu/ppc4xx/cpu.c +++ b/cpu/ppc4xx/cpu.c @@ -332,24 +332,44 @@ int checkcpu (void) strcpy(addstr, "No Security/Kasumi support"); break; - case PVR_440SP_RA: - puts("SP Rev. A"); + case PVR_440SP_6_RAB: + puts("SP Rev. A/B"); + strcpy(addstr, "RAID 6 support"); break; - case PVR_440SP_RB: - puts("SP Rev. B"); + case PVR_440SP_RAB: + puts("SP Rev. A/B"); + strcpy(addstr, "No RAID 6 support"); + break; + + case PVR_440SP_6_RC: + puts("SP Rev. C"); + strcpy(addstr, "RAID 6 support"); break; case PVR_440SP_RC: puts("SP Rev. C"); + strcpy(addstr, "No RAID 6 support"); + break; + + case PVR_440SPe_6_RA: + puts("SPe Rev. A"); + strcpy(addstr, "RAID 6 support"); break; case PVR_440SPe_RA: puts("SPe Rev. A"); + strcpy(addstr, "No RAID 6 support"); + break; + + case PVR_440SPe_6_RB: + puts("SPe Rev. B"); + strcpy(addstr, "RAID 6 support"); break; case PVR_440SPe_RB: puts("SPe Rev. B"); + strcpy(addstr, "No RAID 6 support"); break; default: diff --git a/include/asm-ppc/processor.h b/include/asm-ppc/processor.h index 6619686876c..f102600038b 100644 --- a/include/asm-ppc/processor.h +++ b/include/asm-ppc/processor.h @@ -747,11 +747,14 @@ #define PVR_440GX_RC 0x51B21892 #define PVR_440GX_RF 0x51B21894 #define PVR_405EP_RB 0x51210950 -#define PVR_440SP_RA 0x53221850 -#define PVR_440SP_RB 0x53221891 -#define PVR_440SP_RC 0x53221892 -#define PVR_440SPe_RA 0x53421890 -#define PVR_440SPe_RB 0x53421891 +#define PVR_440SP_6_RAB 0x53221850 /* 440SP rev A&B with RAID 6 support enabled */ +#define PVR_440SP_RAB 0x53321850 /* 440SP rev A&B without RAID 6 support */ +#define PVR_440SP_6_RC 0x53221891 /* 440SP rev C with RAID 6 support enabled */ +#define PVR_440SP_RC 0x53321891 /* 440SP rev C without RAID 6 support */ +#define PVR_440SPe_6_RA 0x53421890 /* 440SPe rev A with RAID 6 support enabled */ +#define PVR_440SPe_RA 0x53521890 /* 440SPe rev A without RAID 6 support */ +#define PVR_440SPe_6_RB 0x53421891 /* 440SPe rev B with RAID 6 support enabled */ +#define PVR_440SPe_RB 0x53521891 /* 440SPe rev B without RAID 6 support */ #define PVR_601 0x00010000 #define PVR_602 0x00050000 #define PVR_603 0x00030000 -- cgit v1.3.1 From 1bbbbdd20fcec9933697000dcf55ff7972622596 Mon Sep 17 00:00:00 2001 From: Wolfgang Denk Date: Tue, 16 Jan 2007 12:46:35 +0100 Subject: Update default environment for Solidcard3 --- include/configs/solidcard3.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'include') diff --git a/include/configs/solidcard3.h b/include/configs/solidcard3.h index 867cba5a353..d71fcaec2aa 100644 --- a/include/configs/solidcard3.h +++ b/include/configs/solidcard3.h @@ -96,6 +96,31 @@ #define CONFIG_BAUDRATE 115200 #define CONFIG_BOOTDELAY 3 /* autoboot after 3 seconds */ +#define CONFIG_PREBOOT "echo;" \ + "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \ + "echo" + +#undef CONFIG_BOOTARGS + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "netdev=eth0\0" \ + "nfsargs=setenv bootargs root=/dev/nfs rw " \ + "nfsroot=${serverip}:${rootpath}\0" \ + "ramargs=setenv bootargs root=/dev/ram rw\0" \ + "nand_args=setenv bootargs root=/dev/mtdblock4 rw\0" \ + "addip=setenv bootargs ${bootargs} " \ + "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}" \ + ":${hostname}:${netdev}:off panic=1\0" \ + "flash_nfs=run nfsargs addip;" \ + "bootm ${kernel_addr}\0" \ + "flash_nand=nand_args addip addcon;bootm ${kernel_addr}\0" \ + "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0" \ + "rootpath=/opt/eldk/ppc_4xx\0" \ + "bootfile=/tftpboot/sc3/uImage\0" \ + "kernel_addr=FFE08000\0" \ + "" +#undef CONFIG_BOOTCOMMAND + #define CONFIG_SILENT_CONSOLE 1 /* enable silent startup */ #define CFG_DEVICE_NULLDEV 1 /* include nulldev device */ -- cgit v1.3.1 From 6d3e0107235aa0e6a6dcb77f9884497280bf85ad Mon Sep 17 00:00:00 2001 From: Wolfgang Denk Date: Tue, 16 Jan 2007 18:30:50 +0100 Subject: Raname solidcard3 into sc3; add redundant env for sc3 --- CHANGELOG | 14 + MAKEALL | 8 +- Makefile | 4 +- board/sc3/Makefile | 47 +++ board/sc3/config.mk | 24 ++ board/sc3/init.S | 382 +++++++++++++++++++++ board/sc3/sc3.c | 779 ++++++++++++++++++++++++++++++++++++++++++ board/sc3/sc3.h | 117 +++++++ board/sc3/sc3nand.c | 94 +++++ board/sc3/u-boot.lds | 150 ++++++++ board/solidcard3/Makefile | 47 --- board/solidcard3/config.mk | 24 -- board/solidcard3/init.S | 382 --------------------- board/solidcard3/sc3nand.c | 94 ----- board/solidcard3/solidcard3.c | 779 ------------------------------------------ board/solidcard3/solidcard3.h | 117 ------- board/solidcard3/u-boot.lds | 150 -------- include/configs/sc3.h | 568 ++++++++++++++++++++++++++++++ include/configs/solidcard3.h | 562 ------------------------------ 19 files changed, 2181 insertions(+), 2161 deletions(-) create mode 100644 board/sc3/Makefile create mode 100644 board/sc3/config.mk create mode 100644 board/sc3/init.S create mode 100644 board/sc3/sc3.c create mode 100644 board/sc3/sc3.h create mode 100644 board/sc3/sc3nand.c create mode 100644 board/sc3/u-boot.lds delete mode 100644 board/solidcard3/Makefile delete mode 100644 board/solidcard3/config.mk delete mode 100644 board/solidcard3/init.S delete mode 100644 board/solidcard3/sc3nand.c delete mode 100644 board/solidcard3/solidcard3.c delete mode 100644 board/solidcard3/solidcard3.h delete mode 100644 board/solidcard3/u-boot.lds create mode 100644 include/configs/sc3.h delete mode 100644 include/configs/solidcard3.h (limited to 'include') diff --git a/CHANGELOG b/CHANGELOG index 5bc95fac49a..ed9ca83612f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,9 @@ +commit 1bbbbdd20fcec9933697000dcf55ff7972622596 +Author: Wolfgang Denk +Date: Tue Jan 16 12:46:35 2007 +0100 + + Update default environment for Solidcard3 + commit 5a5c56986a9ccf71642c8b6374eb18487b15fecd Author: Stefan Roese Date: Mon Jan 15 09:46:29 2007 +0100 @@ -73,6 +79,14 @@ Date: Sat Jan 13 07:57:51 2007 +0100 Signed-off-by: Stefan Roese +commit ca43ba18e910206ef8063e4b22d282630bff3fd2 +Author: Heiko Schocher +Date: Thu Jan 11 15:44:44 2007 +0100 + + Added support for the SOLIDCARD III board from Eurodesign + + Signed-off-by: Heiko Schocher + commit 6abaee42621c07e81a2cd189ad4368b5e8c50280 Author: Reinhard Thies Date: Wed Jan 10 14:41:14 2007 +0100 diff --git a/MAKEALL b/MAKEALL index d2159ef0c9b..7ccaf918c0e 100755 --- a/MAKEALL +++ b/MAKEALL @@ -85,10 +85,10 @@ LIST_4xx=" \ MIP405 MIP405T ML2 ml300 \ ocotea OCRTC ORSG p3p440 \ PCI405 pcs440ep PIP405 PLU405 \ - PMC405 PPChameleonEVB sbc405 sequoia \ - sequoia_nand VOH405 VOM405 W7OLMC \ - W7OLMG walnut WUH405 XPEDITE1K \ - yellowstone yosemite yucca \ + PMC405 PPChameleonEVB sbc405 sc3 \ + sequoia sequoia_nand VOH405 VOM405 \ + W7OLMC W7OLMG walnut WUH405 \ + XPEDITE1K yellowstone yosemite yucca \ " ######################################################################### diff --git a/Makefile b/Makefile index 01349f128c5..3e12982cdef 100644 --- a/Makefile +++ b/Makefile @@ -1200,8 +1200,8 @@ sequoia_nand_config: unconfig @echo "TEXT_BASE = 0x01000000" > $(obj)board/amcc/sequoia/config.tmp @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk -solidcard3_config:unconfig - @./mkconfig $(@:_config=) ppc ppc4xx solidcard3 +sc3_config:unconfig + @./mkconfig $(@:_config=) ppc ppc4xx sc3 sycamore_config: unconfig @echo "Configuring for sycamore board as subset of walnut..." diff --git a/board/sc3/Makefile b/board/sc3/Makefile new file mode 100644 index 00000000000..1b0b15fc626 --- /dev/null +++ b/board/sc3/Makefile @@ -0,0 +1,47 @@ +# +# (C) Copyright 2000 +# 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 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# 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 +# + +include $(TOPDIR)/config.mk + +LIB = lib$(BOARD).a + +OBJS = $(BOARD).o sc3nand.o +SOBJS = init.o + +$(LIB): $(OBJS) $(SOBJS) + $(AR) crv $@ $^ + +clean: + rm -f $(SOBJS) $(OBJS) + +distclean: clean + rm -f $(LIB) core *.bak .depend + +######################################################################### + +.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) + $(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ + +sinclude .depend + +######################################################################### diff --git a/board/sc3/config.mk b/board/sc3/config.mk new file mode 100644 index 00000000000..1bdf5e4fcf3 --- /dev/null +++ b/board/sc3/config.mk @@ -0,0 +1,24 @@ +# +# (C) Copyright 2000 +# 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 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# 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 +# + +TEXT_BASE = 0xFFFC0000 diff --git a/board/sc3/init.S b/board/sc3/init.S new file mode 100644 index 00000000000..e7b3c839492 --- /dev/null +++ b/board/sc3/init.S @@ -0,0 +1,382 @@ +/*------------------------------------------------------------------------------+ + * + * This souce code has been made available to you by EuroDesign + * (www.eurodsn.de). It's based on the original IBM source code, so + * this follows: + * + * This source code has been made available to you by IBM on an AS-IS + * basis. Anyone receiving this source is licensed under IBM + * copyrights to use it in any way he or she deems fit, including + * copying it, modifying it, compiling it, and redistributing it either + * with or without modifications. No license under IBM patents or + * patent applications is to be implied by the copyright license. + * + * Any user of this software should understand that IBM cannot provide + * technical support for this software and will not be responsible for + * any consequences resulting from the use of this software. + * + * Any person who transfers this source code or any derivative work + * must include the IBM copyright notice, this paragraph, and the + * preceding two paragraphs in the transferred software. + * + * COPYRIGHT I B M CORPORATION 1995 + * LICENSED MATERIAL - PROGRAM PROPERTY OF I B M + *------------------------------------------------------------------------------- */ + +#include +#include + +#define _LINUX_CONFIG_H 1 /* avoid reading Linux autoconf.h file */ + +#include +#include + +#include +#include + +/** + * ext_bus_cntlr_init - Initializes the External Bus Controller for the external peripherals + * + * IMPORTANT: For pass1 this code must run from cache since you can not + * reliably change a peripheral banks timing register (pbxap) while running + * code from that bank. For ex., since we are running from ROM on bank 0, we + * can NOT execute the code that modifies bank 0 timings from ROM, so + * we run it from cache. + * + * Bank 0 - Boot-Flash + * Bank 1 - NAND-Flash + * Bank 2 - ISA bus + * Bank 3 - Second Flash + * Bank 4 - USB controller + */ + .globl ext_bus_cntlr_init +ext_bus_cntlr_init: +/* + * We need the current boot up configuration to set correct + * timings into internal flash and external flash + */ + mfdcr r24,strap /* xxxx xxxx xxxx xxx? ?xxx xxxx xxxx xxxx + 0 0 -> 8 bit external ROM + 0 1 -> 16 bit internal ROM */ + addi r4,0,2 + srw r24,r24,r4 /* shift right r24 two positions */ + andi. r24,r24,0x06000 +/* + * All calculations are based on 33MHz EBC clock. + * + * First, create a "very slow" timing (~250ns) with burst mode enabled + * This is need for the external flash access + */ + lis r25,0x0800 + ori r25,r25,0x0280 /* 0000 1000 0xxx 0000 0000 0010 100x xxxx = 0x03800280 +/* + * Second, create a fast timing: + * 90ns first cycle - 3 clock access + * and 90ns burst cycle, plus 1 clock after the last access + * This is used for the internal access + */ + lis r26,0x8900 + ori r26,r26,0x0280 /* 1000 1001 0xxx 0000 0000 0010 100x xxxx +/* + * We can't change settings on CS# if we currently use them. + * -> load a few instructions into cache and run this code from cache + */ + mflr r4 /* save link register */ + bl ..getAddr +..getAddr: + mflr r3 /* get address of ..getAddr */ + mtlr r4 /* restore link register */ + addi r4,0,14 /* set ctr to 10; used to prefetch */ + mtctr r4 /* 10 cache lines to fit this function + in cache (gives us 8x10=80 instructions) */ +..ebcloop: + icbt r0,r3 /* prefetch cache line for addr in r3 */ + addi r3,r3,32 /* move to next cache line */ + bdnz ..ebcloop /* continue for 10 cache lines */ +/* + * Delay to ensure all accesses to ROM are complete before changing + * bank 0 timings. 200usec should be enough. + * 200,000,000 (cycles/sec) X .000200 (sec) = 0x9C40 cycles + */ + lis r3,0x0 + ori r3,r3,0xA000 /* ensure 200usec have passed since reset */ + mtctr r3 +..spinlp: + bdnz ..spinlp /* spin loop */ + +/*----------------------------------------------------------------------- + * Memory Bank 0 (BOOT-ROM) initialization + * 0xFFEF00000....0xFFFFFFF + * We only have to change the timing. Mapping is ok by boot-strapping + *----------------------------------------------------------------------- */ + + li r4,pb0ap /* PB0AP=Peripheral Bank 0 Access Parameters */ + mtdcr ebccfga,r4 + + mr r4,r26 /* assume internal fast flash is boot flash */ + cmpwi r24,0x2000 /* assumption true? ... */ + beq 1f /* ...yes! */ + mr r4,r25 /* ...no, use the slow variant */ + mr r25,r26 /* use this for the other flash */ +1: + mtdcr ebccfgd,r4 /* change timing now */ + + li r4,pb0cr /* PB0CR=Peripheral Bank 0 Control Register */ + mtdcr ebccfga,r4 + mfdcr r4,ebccfgd + lis r3,0x0001 + ori r3,r3,0x8000 /* allow reads and writes */ + or r4,r4,r3 + mtdcr ebccfgd,r4 + +/*----------------------------------------------------------------------- + * Memory Bank 3 (Second-Flash) initialization + * 0xF0000000...0xF01FFFFF -> 2MB + *----------------------------------------------------------------------- */ + + li r4,pb3ap /* Peripheral Bank 1 Access Parameter */ + mtdcr ebccfga,r4 + mtdcr ebccfgd,r2 /* change timing */ + + li r4,pb3cr /* Peripheral Bank 1 Configuration Registers */ + mtdcr ebccfga,r4 + + lis r4,0xF003 + ori r4,r4,0x8000 +/* + * Consider boot configuration + */ + xori r24,r24,0x2000 /* invert current bus width */ + or r4,r4,r24 + mtdcr ebccfgd,r4 + +/*----------------------------------------------------------------------- + * Memory Bank 1 (NAND-Flash) initialization + * 0x77D00000...0x77DFFFFF -> 1MB + * - the write/read pulse to the NAND can be as short as 25ns, bus the cycle time is always 50ns + * - the setup time is 0ns + * - the hold time is 15ns + * -> + * - TWT = 0 + * - CSN = 0 + * - OEN = 0 + * - WBN = 0 + * - WBF = 0 + * - TH = 1 + * ----> 2 clocks per cycle = 60ns cycle (30ns active, 30ns hold) + *----------------------------------------------------------------------- */ + + li r4,pb1ap /* Peripheral Bank 1 Access Parameter */ + mtdcr ebccfga,r4 + + lis r4,0x0000 + ori r4,r4,0x0200 + mtdcr ebccfgd,r4 + + li r4,pb1cr /* Peripheral Bank 1 Configuration Registers */ + mtdcr ebccfga,r4 + + lis r4,0x77D1 + ori r4,r4,0x8000 + mtdcr ebccfgd,r4 + + +/* USB init (without acceleration) */ +#ifndef CONFIG_ISP1161_PRESENT + li r4,pb4ap /* PB4AP=Peripheral Bank 4 Access Parameters */ + mtdcr ebccfga,r4 + lis r4,0x0180 + ori r4,r4,0x5940 + mtdcr ebccfgd,r4 +#endif + +/*----------------------------------------------------------------------- + * Memory Bank 2 (ISA Access) initialization (plus memory bank 6 and 7) + * 0x78000000...0x7BFFFFFF -> 64 MB + * Wir arbeiten bei 33 MHz -> 30ns + *----------------------------------------------------------------------- + + A7 (ppc notation) or A24 (standard notation) decides about + the type of access: + A7/A24=0 -> memory cycle + A7/ /A24=1 -> I/O cycle +*/ + li r4,pb2ap /* PB2AP=Peripheral Bank 2 Access Parameters */ + mtdcr ebccfga,r4 +/* + We emulate an ISA access + + 1. Address active + 2. wait 0 EBC clocks -> CSN=0 + 3. set CS# + 4. wait 0 EBC clock -> OEN/WBN=0 + 5. set OE#/WE# + 6. wait 4 clocks (ca. 90ns) and for Ready signal + 7. hold for 4 clocks -> TH=4 +*/ + +#if 1 +/* faster access to isa-bus */ + lis r4,0x0180 + ori r4,r4,0x5940 +#else + lis r4,0x0100 + ori r4,r4,0x0340 +#endif + mtdcr ebccfgd,r4 + +#ifdef IDE_USES_ISA_EMULATION + li r25,pb5ap /* PB5AP=Peripheral Bank 5 Access Parameters */ + mtdcr ebccfga,r25 + mtdcr ebccfgd,r4 +#endif + + li r25,pb6ap /* PB6AP=Peripheral Bank 6 Access Parameters */ + mtdcr ebccfga,r25 + mtdcr ebccfgd,r4 + li r25,pb7ap /* PB7AP=Peripheral Bank 7 Access Parameters */ + mtdcr ebccfga,r25 + mtdcr ebccfgd,r4 + + li r25,pb2cr /* PB2CR=Peripheral Bank 2 Configuration Register */ + mtdcr ebccfga,r25 + + lis r4,0x780B + ori r4,r4,0xA000 + mtdcr ebccfgd,r4 +/* + * the other areas are only 1MiB in size + */ + lis r4,0x7401 + ori r4,r4,0xA000 + + li r25,pb6cr /* PB6CR=Peripheral Bank 6 Configuration Register */ + mtdcr ebccfga,r25 + lis r4,0x7401 + ori r4,r4,0xA000 + mtdcr ebccfgd,r4 + + li r25,pb7cr /* PB7CR=Peripheral Bank 7 Configuration Register */ + mtdcr ebccfga,r25 + lis r4,0x7411 + ori r4,r4,0xA000 + mtdcr ebccfgd,r4 + +#ifndef CONFIG_ISP1161_PRESENT + li r25,pb4cr /* PB4CR=Peripheral Bank 4 Configuration Register */ + mtdcr ebccfga,r25 + lis r4,0x7421 + ori r4,r4,0xA000 + mtdcr ebccfgd,r4 +#endif +#ifdef IDE_USES_ISA_EMULATION + li r25,pb5cr /* PB5CR=Peripheral Bank 5 Configuration Register */ + mtdcr ebccfga,r25 + lis r4,0x0000 + ori r4,r4,0x0000 + mtdcr ebccfgd,r4 +#endif + +/*----------------------------------------------------------------------- + * Memory bank 4: USB controller Philips ISP6111 + * 0x77C00000 ... 0x77CFFFFF + * + * The chip is connected to: + * - CPU CS#4 + * - CPU IRQ#2 + * - CPU DMA 3 + * + * Timing: + * - command to first data: 300ns. Software must ensure this timing! + * - Write pulse: 26ns + * - Read pulse: 33ns + * - read cycle time: 150ns + * - write cycle time: 140ns + * + * Note: All calculations are based on 33MHz EBC clock. One '#' or '_' is 30ns + * + * |- 300ns --| + * |---- 420ns ---|---- 420ns ---| cycle + * CS ############:###____#######:###____####### + * OE ############:####___#######:####___####### + * WE ############:####__########:####__######## + * + * ----> 2 clocks RD/WR pulses: 60ns + * ----> CSN: 3 clock, 90ns + * ----> OEN: 1 clocks (read cycle) + * ----> WBN: 1 clocks (write cycle) + * ----> WBE: 2 clocks + * ----> TH: 7 clock, 210ns + * ----> TWT: 7 clocks + *----------------------------------------------------------------------- */ + +#ifdef CONFIG_ISP1161_PRESENT + + li r4,pb4ap /* PB4AP=Peripheral Bank 4 Access Parameters */ + mtdcr ebccfga,r4 + + lis r4,0x030D + ori r4,r4,0x5E80 + mtdcr ebccfgd,r4 + + li r4,pb4cr /* PB2CR=Peripheral Bank 4 Configuration Register */ + mtdcr ebccfga,r4 + + lis r4,0x77C1 + ori r4,r4,0xA000 + mtdcr ebccfgd,r4 + +#endif + +#ifndef IDE_USES_ISA_EMULATION + +/*----------------------------------------------------------------------- + * Memory Bank 5 used for IDE access + * + * Timings for IDE Interface + * + * SETUP / LENGTH / HOLD - cycles valid for 33.3 MHz clk -> 30ns cycle time + * 70 165 30 PIO-Mode 0, [ns] + * 3 6 1 [Cycles] ----> AP=0x040C0200 + * 50 125 20 PIO-Mode 1, [ns] + * 2 5 1 [Cycles] ----> AP=0x03080200 + * 30 100 15 PIO-Mode 2, [ns] + * 1 4 1 [Cycles] ----> AP=0x02040200 + * 30 80 10 PIO-Mode 3, [ns] + * 1 3 1 [Cycles] ----> AP=0x01840200 + * 25 70 10 PIO-Mode 4, [ns] + * 1 3 1 [Cycles] ----> AP=0x01840200 + * + *----------------------------------------------------------------------- */ + + li r4,pb5ap + mtdcr ebccfga,r4 + lis r4,0x040C + ori r4,r4,0x0200 + mtdcr ebccfgd,r4 + + li r4,pb5cr /* PB2CR=Peripheral Bank 2 Configuration Register */ + mtdcr ebccfga,r4 + + lis r4,0x7A01 + ori r4,r4,0xA000 + mtdcr ebccfgd,r4 +#endif +/* + * External Peripheral Control Register + */ + li r4,epcr + mtdcr ebccfga,r4 + + lis r4,0xB84E + ori r4,r4,0xF000 + mtdcr ebccfgd,r4 +/* + * drive POST code + */ + lis r4,0x7900 + ori r4,r4,0x0080 + li r3,0x0001 + stb r3,0(r4) /* 01 -> external bus controller is initialized */ + nop /* pass2 DCR errata #8 */ + blr diff --git a/board/sc3/sc3.c b/board/sc3/sc3.c new file mode 100644 index 00000000000..d94896ecd00 --- /dev/null +++ b/board/sc3/sc3.c @@ -0,0 +1,779 @@ +/* + * (C) Copyright 2007 + * Heiko Schocher, DENX Software Engineering, . + * + * (C) Copyright 2003 + * Juergen Beisert, EuroDesign embedded technologies, info@eurodsn.de + * Derived from walnut.c + * + * (C) Copyright 2000 + * 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 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 + * + * $Log:$ + */ + +#include +#include +#include +#include "sc3.h" +#include +#include +#include + +#undef writel +#undef writeb +#define writeb(b,addr) ((*(volatile u8 *) (addr)) = (b)) +#define writel(b,addr) ((*(volatile u32 *) (addr)) = (b)) + +/* write only register to configure things in our CPLD */ +#define CPLD_CONTROL_1 0x79000102 +#define CPLD_VERSION 0x79000103 + +#define IS_CAMERON ((*(unsigned char *)(CPLD_VERSION)== 0x32) ? 1 : 0) + +static struct pci_controller hose={0,}; + +/************************************************************ + * Standard definition + ************************************************************/ + +/* CPC0_CR0 Function ISA bus + - GPIO0 + - GPIO1 -> Output: NAND-Command Latch Enable + - GPIO2 -> Output: NAND Address Latch Enable + - GPIO3 -> IRQ input ISA-IRQ #5 (through CPLD) + - GPIO4 -> Output: NAND-Chip Enable + - GPIO5 -> IRQ input ISA-IRQ#7 (through CPLD) + - GPIO6 -> IRQ input ISA-IRQ#9 (through CPLD) + - GPIO7 -> IRQ input ISA-IRQ#10 (through CPLD) + - GPIO8 -> IRQ input ISA-IRQ#11 (through CPLD) + - GPIO9 -> IRQ input ISA-IRQ#12 (through CPLD) + - GPIO10/CS1# -> CS1# NAND ISA-CS#0 + - GPIO11/CS2# -> CS2# ISA emulation ISA-CS#1 + - GPIO12/CS3# -> CS3# 2nd Flash-Bank ISA-CS#2 or ISA-CS#7 + - GPIO13/CS4# -> CS4# USB HC or ISA emulation ISA-CS#3 + - GPIO14/CS5# -> CS5# Boosted IDE access ISA-CS#4 + - GPIO15/CS6# -> CS6# ISA emulation ISA-CS#5 + - GPIO16/CS7# -> CS7# ISA emulation ISA-CS#6 + - GPIO17/IRQ0 -> GPIO, in, NAND-Ready/Busy# line ISA-IRQ#3 + - GPIO18/IRQ1 -> IRQ input ISA-IRQ#14 + - GPIO19/IRQ2 -> IRQ input or USB ISA-IRQ#4 + - GPIO20/IRQ3 -> IRQ input PCI-IRQ#D + - GPIO21/IRQ4 -> IRQ input PCI-IRQ#C + - GPIO22/IRQ5 -> IRQ input PCI-IRQ#B + - GPIO23/IRQ6 -> IRQ input PCI-IRQ#A + - GPIO24 -> if GPIO output: 0=JTAG CPLD activ, 1=JTAG CPLD inactiv +*/ +/* +| CPLD register: io-space at offset 0x102 (write only) +| 0 +| 1 +| 2 0=CS#4 USB CS#, 1=ISA or GP bus +| 3 +| 4 +| 5 +| 6 1=enable faster IDE access +| 7 +*/ +#define USB_CHIP_ENABLE 0x04 +#define IDE_BOOSTING 0x40 + +/* --------------- USB stuff ------------------------------------- */ +#ifdef CONFIG_ISP1161_PRESENT +/** + * initUsbHost- Initialize the Philips isp1161 HC part if present + * @cpldConfig: Pointer to value in write only CPLD register + * + * Initialize the USB host controller if present and fills the + * scratch register to inform the driver about used resources + */ + +static void initUsbHost (unsigned char *cpldConfig) +{ + int i; + unsigned long usbBase; + /* + * Read back where init.S has located the USB chip + */ + mtdcr (0x012, 0x04); + usbBase = mfdcr (0x013); + if (!(usbBase & 0x18000)) /* enabled? */ + return; + usbBase &= 0xFFF00000; + + /* + * to test for the USB controller enable using of CS#4 and DMA 3 for USB access + */ + writeb (*cpldConfig | USB_CHIP_ENABLE,CPLD_CONTROL_1); + + /* + * first check: is the controller assembled? + */ + hcWriteWord (usbBase, 0x5555, HcScratch); + if (hcReadWord (usbBase, HcScratch) == 0x5555) { + hcWriteWord (usbBase, 0xAAAA, HcScratch); + if (hcReadWord (usbBase, HcScratch) == 0xAAAA) { + if ((hcReadWord (usbBase, HcChipID) & 0xFF00) != 0x6100) + return; /* this is not our controller */ + /* + * try a software reset. This needs up to 10 seconds (see datasheet) + */ + hcWriteDWord (usbBase, 0x00000001, HcCommandStatus); + for (i = 1000; i > 0; i--) { /* loop up to 10 seconds */ + udelay (10); + if (!(hcReadDWord (usbBase, HcCommandStatus) & 0x01)) + break; + } + + if (!i) + return; /* the controller doesn't responding. Broken? */ + /* + * OK. USB controller is ready. Initialize it in such way the later driver + * can us it (without any knowing about specific implementation) + */ + hcWriteDWord (usbBase, 0x00000000, HcControl); + /* + * disable all interrupt sources. Because we + * don't know where we come from (hard reset, cold start, soft reset...) + */ + hcWriteDWord (usbBase, 0x8000007D, HcInterruptDisable); + /* + * our current setup hardware configuration + * - every port power supply can switched indepently + * - every port can signal overcurrent + * - every port is "outside" and the devices are removeable + */ + hcWriteDWord (usbBase, 0x32000902, HcRhDescriptorA); + hcWriteDWord (usbBase, 0x00060000, HcRhDescriptorB); + /* + * don't forget to switch off power supply of each port + * The later running driver can reenable them to find and use + * the (maybe) connected devices. + * + */ + hcWriteDWord (usbBase, 0x00000200, HcRhPortStatus1); + hcWriteDWord (usbBase, 0x00000200, HcRhPortStatus2); + hcWriteWord (usbBase, 0x0428, HcHardwareConfiguration); + hcWriteWord (usbBase, 0x0040, HcDMAConfiguration); + hcWriteWord (usbBase, 0x0000, HcuPInterruptEnable); + hcWriteWord (usbBase, 0xA000 | (0x03 << 8) | 27, HcScratch); + /* + * controller is present and usable + */ + *cpldConfig |= USB_CHIP_ENABLE; + } + } +} +#endif + +#if defined(CONFIG_START_IDE) +int board_start_ide(void) +{ + if (IS_CAMERON) { + puts ("no IDE on cameron board.\n"); + return 0; + } + return 1; +} +#endif + +static int sc3_cameron_init (void) +{ + /* Set up the Memory Controller for the CAMERON version */ + mtebc (pb4ap, 0x01805940); + mtebc (pb4cr, 0x7401a000); + mtebc (pb5ap, 0x01805940); + mtebc (pb5cr, 0x7401a000); + mtebc (pb6ap, 0x0); + mtebc (pb6cr, 0x0); + mtebc (pb7ap, 0x0); + mtebc (pb7cr, 0x0); + return 0; +} + +void sc3_read_eeprom (void) +{ + uchar i2c_buffer[18]; + + i2c_read (0x50, 0x03, 1, i2c_buffer, 9); + i2c_buffer[9] = 0; + setenv ("serial#", (char *)i2c_buffer); + + /* read mac-address from eeprom */ + i2c_read (0x50, 0x11, 1, i2c_buffer, 15); + i2c_buffer[17] = 0; + i2c_buffer[16] = i2c_buffer[14]; + i2c_buffer[15] = i2c_buffer[13]; + i2c_buffer[14] = ':'; + i2c_buffer[13] = i2c_buffer[12]; + i2c_buffer[12] = i2c_buffer[11]; + i2c_buffer[11] = ':'; + i2c_buffer[8] = ':'; + i2c_buffer[5] = ':'; + i2c_buffer[2] = ':'; + setenv ("ethaddr", (char *)i2c_buffer); +} + +int board_early_init_f (void) +{ + /* write only register to configure things in our CPLD */ + unsigned char cpldConfig_1=0x00; + +/*-------------------------------------------------------------------------+ +| Interrupt controller setup for the SolidCard III CPU card (plus Evaluation board). +| +| Note: IRQ 0 UART 0, active high; level sensitive +| IRQ 1 UART 1, active high; level sensitive +| IRQ 2 IIC, active high; level sensitive +| IRQ 3 Ext. master, rising edge, edge sensitive +| IRQ 4 PCI, active high; level sensitive +| IRQ 5 DMA Channel 0, active high; level sensitive +| IRQ 6 DMA Channel 1, active high; level sensitive +| IRQ 7 DMA Channel 2, active high; level sensitive +| IRQ 8 DMA Channel 3, active high; level sensitive +| IRQ 9 Ethernet Wakeup, active high; level sensitive +| IRQ 10 MAL System Error (SERR), active high; level sensitive +| IRQ 11 MAL Tx End of Buffer, active high; level sensitive +| IRQ 12 MAL Rx End of Buffer, active high; level sensitive +| IRQ 13 MAL Tx Descriptor Error, active high; level sensitive +| IRQ 14 MAL Rx Descriptor Error, active high; level sensitive +| IRQ 15 Ethernet, active high; level sensitive +| IRQ 16 External PCI SERR, active high; level sensitive +| IRQ 17 ECC Correctable Error, active high; level sensitive +| IRQ 18 PCI Power Management, active high; level sensitive +| +| IRQ 19 (EXT IRQ7 405GPr only) +| IRQ 20 (EXT IRQ8 405GPr only) +| IRQ 21 (EXT IRQ9 405GPr only) +| IRQ 22 (EXT IRQ10 405GPr only) +| IRQ 23 (EXT IRQ11 405GPr only) +| IRQ 24 (EXT IRQ12 405GPr only) +| +| IRQ 25 (EXT IRQ 0) NAND-Flash R/B# (raising edge means flash is ready) +| IRQ 26 (EXT IRQ 1) IDE0 interrupt (x86 = IRQ14). Active high (edge sensitive) +| IRQ 27 (EXT IRQ 2) USB controller +| IRQ 28 (EXT IRQ 3) INT D, VGA; active low; level sensitive +| IRQ 29 (EXT IRQ 4) INT C, Ethernet; active low; level sensitive +| IRQ 30 (EXT IRQ 5) INT B, PC104+ SLOT; active low; level sensitive +| IRQ 31 (EXT IRQ 6) INT A, PC104+ SLOT; active low; level sensitive +| +| Direct Memory Access Controller Signal Polarities +| DRQ0 active high (like ISA) +| ACK0 active low (like ISA) +| EOT0 active high (like ISA) +| DRQ1 active high (like ISA) +| ACK1 active low (like ISA) +| EOT1 active high (like ISA) +| DRQ2 active high (like ISA) +| ACK2 active low (like ISA) +| EOT2 active high (like ISA) +| DRQ3 active high (like ISA) +| ACK3 active low (like ISA) +| EOT3 active high (like ISA) +| ++-------------------------------------------------------------------------*/ + + writeb (cpldConfig_1, CPLD_CONTROL_1); /* disable everything in CPLD */ + + mtdcr (uicsr, 0xFFFFFFFF); /* clear all ints */ + mtdcr (uicer, 0x00000000); /* disable all ints */ + mtdcr (uiccr, 0x00000000); /* set all to be non-critical */ + + if (IS_CAMERON) { + sc3_cameron_init(); + mtdcr (0x0B6, 0x18000000); + mtdcr (uicpr, 0xFFFFFFF0); + mtdcr (uictr, 0x10001030); + } else { + mtdcr (0x0B6, 0x0000000); + mtdcr (uicpr, 0xFFFFFFE0); + mtdcr (uictr, 0x10000020); + } + mtdcr (uicvcr, 0x00000001); /* set vect base=0,INT0 highest priority */ + mtdcr (uicsr, 0xFFFFFFFF); /* clear all ints */ + + /* setup other implementation specific details */ + mtdcr (ecr, 0x60606000); + + mtdcr (cntrl1, 0x000042C0); + + if (IS_CAMERON) { + mtdcr (cntrl0, 0x01380000); + /* Setup the GPIOs */ + writel (0x08008000, 0xEF600700); /* Output states */ + writel (0x00000000, 0xEF600718); /* Open Drain control */ + writel (0x68098000, 0xEF600704); /* Output control */ + } else { + mtdcr (cntrl0,0x00080000); + /* Setup the GPIOs */ + writel (0x08000000, 0xEF600700); /* Output states */ + writel (0x14000000, 0xEF600718); /* Open Drain control */ + writel (0x7C000000, 0xEF600704); /* Output control */ + } + + /* Code decompression disabled */ + mtdcr (kiar, kconf); + mtdcr (kidr, 0x2B); + + /* CPC0_ER: enable sleep mode of (currently) unused components */ + /* CPC0_FR: force unused components into sleep mode */ + mtdcr (cpmer, 0x3F800000); + mtdcr (cpmfr, 0x14000000); + + /* set PLB priority */ + mtdcr (0x87, 0x08000000); + + /* --------------- DMA stuff ------------------------------------- */ + mtdcr (0x126, 0x49200000); + +#ifndef IDE_USES_ISA_EMULATION + cpldConfig_1 |= IDE_BOOSTING; /* enable faster IDE */ + /* cpldConfig |= 0x01; */ /* enable 8.33MHz output, if *not* present on your baseboard */ + writeb (cpldConfig_1, CPLD_CONTROL_1); +#endif + +#ifdef CONFIG_ISP1161_PRESENT + initUsbHost (&cpldConfig_1); + writeb (cpldConfig_1, CPLD_CONTROL_1); +#endif + return(0); +} + +int misc_init_r (void) +{ + char *s1; + int i, xilinx_val; + volatile char *xilinx_adr; + xilinx_adr = (char *)0x79000102; + + *xilinx_adr = 0x00; + +/* customer settings ***************************************** */ +/* + s1 = getenv ("function"); + if (s1) { + if (!strcmp (s1, "Rosho")) { + printf ("function 'Rosho' activated\n"); + *xilinx_adr = 0x40; + } + else { + printf (">>>>>>>>>> function %s not recognized\n",s1); + } + } +*/ + +/* individual settings ***************************************** */ + if ((s1 = getenv ("xilinx"))) { + i=0; + xilinx_val = 0; + while (i < 3 && s1[i]) { + if (s1[i] >= '0' && s1[i] <= '9') + xilinx_val = (xilinx_val << 4) + s1[i] - '0'; + else + if (s1[i] >= 'A' && s1[i] <= 'F') + xilinx_val = (xilinx_val << 4) + s1[i] - 'A' + 10; + else + if (s1[i] >= 'a' && s1[i] <= 'f') + xilinx_val = (xilinx_val << 4) + s1[i] - 'a' + 10; + else { + xilinx_val = -1; + break; + } + i++; + } + if (xilinx_val >= 0 && xilinx_val <=255 && i < 3) { + printf ("Xilinx: set to %s\n", s1); + *xilinx_adr = (unsigned char) xilinx_val; + } else + printf ("Xilinx: rejected value %s\n", s1); + } + return 0; +} + +/* ------------------------------------------------------------------------- + * printCSConfig + * + * Print some informations about chips select configurations + * Only used while debugging. + * + * Params: + * - No. of CS pin + * - AP of this CS + * - CR of this CS + * + * Returns + * nothing + ------------------------------------------------------------------------- */ + +#ifdef SC3_DEBUGOUT +static void printCSConfig(int reg,unsigned long ap,unsigned long cr) +{ + const char *bsize[4] = {"8","16","32","?"}; + const unsigned char banks[8] = {1, 2, 4, 8, 16, 32, 64, 128}; + const char *bankaccess[4] = {"disabled", "RO", "WO", "RW"}; + +#define CYCLE 30 /* time of one clock (based on 33MHz) */ + + printf("\nCS#%d",reg); + if (!(cr & 0x00018000)) + puts(" unused"); + else { + if (((cr&0xFFF00000U) & ((banks[(cr & 0x000E0000) >> 17]-1) << 20))) + puts(" Address is not multiple of bank size!"); + + printf("\n -%s bit device", + bsize[(cr & 0x00006000) >> 13]); + printf(" at 0x%08lX", cr & 0xFFF00000U); + printf(" size: %u MB", banks[(cr & 0x000E0000) >> 17]); + printf(" rights: %s", bankaccess[(cr & 0x00018000) >> 15]); + if (ap & 0x80000000) { + printf("\n -Burst device (%luns/%luns)", + (((ap & 0x7C000000) >> 26) + 1) * CYCLE, + (((ap & 0x03800000) >> 23) + 1) * CYCLE); + } else { + printf("\n -Non burst device, active cycle %luns", + (((ap & 0x7F800000) >> 23) + 1) * CYCLE); + printf("\n -Address setup %luns", + ((ap & 0xC0000) >> 18) * CYCLE); + printf("\n -CS active to RD %luns/WR %luns", + ((ap & 0x30000) >> 16) * CYCLE, + ((ap & 0xC000) >> 14) * CYCLE); + printf("\n -WR to CS inactive %luns", + ((ap & 0x3000) >> 12) * CYCLE); + printf("\n -Hold after access %luns", + ((ap & 0xE00) >> 9) * CYCLE); + printf("\n -Ready is %sabled", + ap & 0x100 ? "en" : "dis"); + } + } +} +#endif + +#ifdef SC3_DEBUGOUT + +static unsigned int ap[] = {pb0ap, pb1ap, pb2ap, pb3ap, pb4ap, + pb5ap, pb6ap, pb7ap}; +static unsigned int cr[] = {pb0cr, pb1cr, pb2cr, pb3cr, pb4cr, + pb5cr, pb6cr, pb7cr}; + +static int show_reg (int nr) +{ + unsigned long ul1, ul2; + + mtdcr (ebccfga, ap[nr]); + ul1 = mfdcr (ebccfgd); + mtdcr (ebccfga, cr[nr]); + ul2 = mfdcr(ebccfgd); + printCSConfig(nr, ul1, ul2); + return 0; +} +#endif + +int checkboard (void) +{ +#ifdef SC3_DEBUGOUT + unsigned long ul1; + int i; + + for (i = 0; i < 8; i++) { + show_reg (i); + } + + mtdcr (ebccfga, epcr); + ul1 = mfdcr (ebccfgd); + + puts ("\nGeneral configuration:\n"); + + if (ul1 & 0x80000000) + printf(" -External Bus is always driven\n"); + + if (ul1 & 0x400000) + printf(" -CS signals are always driven\n"); + + if (ul1 & 0x20000) + printf(" -PowerDown after %lu clocks\n", + (ul1 & 0x1F000) >> 7); + + switch (ul1 & 0xC0000) + { + case 0xC0000: + printf(" -No external master present\n"); + break; + case 0x00000: + printf(" -8 bit external master present\n"); + break; + case 0x40000: + printf(" -16 bit external master present\n"); + break; + case 0x80000: + printf(" -32 bit external master present\n"); + break; + } + + switch (ul1 & 0x300000) + { + case 0x300000: + printf(" -Prefetch: Illegal setting!\n"); + break; + case 0x000000: + printf(" -1 doubleword prefetch\n"); + break; + case 0x100000: + printf(" -2 doublewords prefetch\n"); + break; + case 0x200000: + printf(" -4 doublewords prefetch\n"); + break; + } + putc ('\n'); +#endif + printf("Board: SolidCard III %s %s version.\n", + (IS_CAMERON ? "Cameron" : "Eurodesign"), CONFIG_SC3_VERSION); + return 0; +} + +static int printSDRAMConfig(char reg, unsigned long cr) +{ + const int bisize[8]={4, 8, 16, 32, 64, 128, 256, 0}; +#ifdef SC3_DEBUGOUT + const char *basize[8]= + {"4", "8", "16", "32", "64", "128", "256", "Reserved"}; + + printf("SDRAM bank %d",reg); + + if (!(cr & 0x01)) + puts(" disabled\n"); + else { + printf(" at 0x%08lX, size %s MB",cr & 0xFFC00000,basize[(cr&0xE0000)>>17]); + printf(" mode %lu\n",((cr & 0xE000)>>13)+1); + } +#endif + + if (cr & 0x01) + return(bisize[(cr & 0xE0000) >> 17]); + + return 0; +} + +#ifdef SC3_DEBUGOUT +static unsigned int mbcf[] = {mem_mb0cf, mem_mb1cf, mem_mb2cf, mem_mb3cf}; +#endif + +long int initdram (int board_type) +{ + unsigned int mems=0; + unsigned long ul1; + +#ifdef SC3_DEBUGOUT + unsigned long ul2; + int i; + + puts("\nSDRAM configuration:\n"); + + mtdcr (memcfga, mem_mcopt1); + ul1 = mfdcr(memcfgd); + + if (!(ul1 & 0x80000000)) { + puts(" Controller disabled\n"); + return 0; + } + for (i = 0; i < 4; i++) { + mtdcr (memcfga, mbcf[i]); + ul1 = mfdcr (memcfgd); + mems += printSDRAMConfig (i, ul1); + } + + mtdcr (memcfga, mem_sdtr1); + ul1 = mfdcr(memcfgd); + + printf ("Timing:\n -CAS latency %lu\n", ((ul1 & 0x1800000) >> 23)+1); + printf (" -Precharge %lu (PTA) \n", ((ul1 & 0xC0000) >> 18) + 1); + printf (" -R/W to Precharge %lu (CTP)\n", ((ul1 & 0x30000) >> 16) + 1); + printf (" -Leadoff %lu\n", ((ul1 & 0xC000) >> 14) + 1); + printf (" -CAS to RAS %lu\n", ((ul1 & 0x1C) >> 2) + 4); + printf (" -RAS to CAS %lu\n", ((ul1 & 0x3) + 1)); + puts ("Misc:\n"); + mtdcr (memcfga, mem_rtr); + ul1 = mfdcr(memcfgd); + printf (" -Refresh rate: %luns\n", (ul1 >> 16) * 7); + + mtdcr(memcfga,mem_pmit); + ul2=mfdcr(memcfgd); + + mtdcr(memcfga,mem_mcopt1); + ul1=mfdcr(memcfgd); + + if (ul1 & 0x20000000) + printf(" -Power Down after: %luns\n", + ((ul2 & 0xFFC00000) >> 22) * 7); + else + puts(" -Power Down disabled\n"); + + if (ul1 & 0x40000000) + printf(" -Self refresh feature active\n"); + else + puts(" -Self refresh disabled\n"); + + if (ul1 & 0x10000000) + puts(" -ECC enabled\n"); + else + puts(" -ECC disabled\n"); + + if (ul1 & 0x8000000) + puts(" -Using registered SDRAM\n"); + + if (!(ul1 & 0x6000000)) + puts(" -Using 32 bit data width\n"); + else + puts(" -Illegal data width!\n"); + + if (ul1 & 0x400000) + puts(" -ECC drivers inactive\n"); + else + puts(" -ECC drivers active\n"); + + if (ul1 & 0x200000) + puts(" -Memory lines always active outputs\n"); + else + puts(" -Memory lines only at write cycles active outputs\n"); + + mtdcr (memcfga, mem_status); + ul1 = mfdcr (memcfgd); + if (ul1 & 0x80000000) + puts(" -SDRAM Controller ready\n"); + else + puts(" -SDRAM Controller not ready\n"); + + if (ul1 & 0x4000000) + puts(" -SDRAM in self refresh mode!\n"); + + return (mems * 1024 * 1024); +#else + mtdcr (memcfga, mem_mb0cf); + ul1 = mfdcr (memcfgd); + mems = printSDRAMConfig (0, ul1); + + mtdcr (memcfga, mem_mb1cf); + ul1 = mfdcr (memcfgd); + mems += printSDRAMConfig (1, ul1); + + mtdcr (memcfga, mem_mb2cf); + ul1 = mfdcr(memcfgd); + mems += printSDRAMConfig (2, ul1); + + mtdcr (memcfga, mem_mb3cf); + ul1 = mfdcr(memcfgd); + mems += printSDRAMConfig (3, ul1); + + return (mems * 1024 * 1024); +#endif +} + +static void pci_solidcard3_fixup_irq (struct pci_controller *hose, pci_dev_t dev) +{ +/*-------------------------------------------------------------------------+ + | ,-. ,-. ,-. ,-. ,-. + | INTD# ----|B|-----|P|-. ,-|P|-. ,-| |-. ,-|G| + | |R| |C| \ / |C| \ / |E| \ / |r| + | INTC# ----|I|-----|1|-. `/---|1|-. `/---|t|-. `/---|a| + | |D| |0| \/ |0| \/ |h| \/ |f| + | INTB# ----|G|-----|4|-./`----|4|-./`----|e|-./`----|i| + | |E| |+| /\ |+| /\ |r| /\ |k| + | INTA# ----| |-----| |- `----| |- `----| |- `----| | + | `-' `-' `-' `-' `-' + | Slot 0 10 11 12 13 + | REQ# 0 1 2 * + | GNT# 0 1 2 * + +-------------------------------------------------------------------------*/ + unsigned char int_line = 0xff; + + switch (PCI_DEV(dev)) { + case 10: + int_line = 31; /* INT A */ + POST_OUT(0x42); + break; + + case 11: + int_line = 30; /* INT B */ + POST_OUT(0x43); + break; + + case 12: + int_line = 29; /* INT C */ + POST_OUT(0x44); + break; + + case 13: + int_line = 28; /* INT D */ + POST_OUT(0x45); + break; + } + pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, int_line); +} + +extern void pci_405gp_init(struct pci_controller *hose); +extern void pci_405gp_fixup_irq(struct pci_controller *hose, pci_dev_t dev); +extern void pci_405gp_setup_bridge(struct pci_controller *hose, pci_dev_t dev,struct pci_config_table *entry); +/* + * The following table is used when there is a special need to setup a PCI device. + * For every PCI device found in this table is called the given init function with given + * parameters. So never let all IDs at PCI_ANY_ID. In this case any found device gets the same + * parameters! + * +*/ +static struct pci_config_table pci_solidcard3_config_table[] = +{ +/* Host to PCI Bridge device (405GP) */ + { + vendor: 0x1014, + device: 0x0156, + class: PCI_CLASS_BRIDGE_HOST, + bus: 0, + dev: 0, + func: 0, + config_device: pci_405gp_setup_bridge + }, + { } +}; + +/*-------------------------------------------------------------------------+ + | pci_init_board (Called from pci_init() in drivers/pci.c) + | + | Init the PCI part of the SolidCard III + | + | Params: + * - Pointer to current PCI hose + * - Current Device + * + * Returns + * nothing + +-------------------------------------------------------------------------*/ + +void pci_init_board(void) +{ + POST_OUT(0x41); +/* + * we want the ptrs to RAM not flash (ie don't use init list) + */ + hose.fixup_irq = pci_solidcard3_fixup_irq; + hose.config_table = pci_solidcard3_config_table; + pci_405gp_init(&hose); +} diff --git a/board/sc3/sc3.h b/board/sc3/sc3.h new file mode 100644 index 00000000000..cf920f9f511 --- /dev/null +++ b/board/sc3/sc3.h @@ -0,0 +1,117 @@ +/* + * (C) Copyright 2000 + * 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 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 + */ + +/** + * hcWriteWord - write a 16 bit value into the USB controller + * @base: base address to access the chip registers + * @value: 16 bit value to write into register @offset + * @offset: register to write the @value into + * + */ +static void inline hcWriteWord (unsigned long base, unsigned int value, + unsigned int offset) +{ + out_le16 ((volatile u16*)(base + 2), offset | 0x80); + out_le16 ((volatile u16*)base, value); +} + +/** + * hcWriteDWord - write a 32 bit value into the USB controller + * @base: base address to access the chip registers + * @value: 32 bit value to write into register @offset + * @offset: register to write the @value into + * + */ + +static void inline hcWriteDWord (unsigned long base, unsigned long value, + unsigned int offset) +{ + out_le16 ((volatile u16*)(base + 2), offset | 0x80); + out_le16 ((volatile u16*)base, value); + out_le16 ((volatile u16*)base, value >> 16); +} + +/** + * hcReadWord - read a 16 bit value from the USB controller + * @base: base address to access the chip registers + * @offset: register to read from + * + * Returns the readed register value + */ + +static unsigned int inline hcReadWord (unsigned long base, unsigned int offset) +{ + out_le16 ((volatile u16*)(base + 2), offset); + return (in_le16 ((volatile u16*)base)); +} + +/** + * hcReadDWord - read a 32 bit value from the USB controller + * @base: base address to access the chip registers + * @offset: register to read from + * + * Returns the readed register value + */ + +static unsigned long inline hcReadDWord (unsigned long base, unsigned int offset) +{ + unsigned long val, val16; + + out_le16 ((volatile u16*)(base + 2), offset); + val = in_le16((volatile u16*)base); + val16 = in_le16((volatile u16*)base); + return (val | (val16 << 16)); +} + +/* control and status registers isp1161 */ +#define HcRevision 0x00 +#define HcControl 0x01 +#define HcCommandStatus 0x02 +#define HcInterruptStatus 0x03 +#define HcInterruptEnable 0x04 +#define HcInterruptDisable 0x05 +#define HcFmInterval 0x0D +#define HcFmRemaining 0x0E +#define HcFmNumber 0x0F +#define HcLSThreshold 0x11 +#define HcRhDescriptorA 0x12 +#define HcRhDescriptorB 0x13 +#define HcRhStatus 0x14 +#define HcRhPortStatus1 0x15 +#define HcRhPortStatus2 0x16 + +#define HcHardwareConfiguration 0x20 +#define HcDMAConfiguration 0x21 +#define HcTransferCounter 0x22 +#define HcuPInterrupt 0x24 +#define HcuPInterruptEnable 0x25 +#define HcChipID 0x27 +#define HcScratch 0x28 +#define HcSoftwareReset 0x29 +#define HcITLBufferLength 0x2A +#define HcATLBufferLength 0x2B +#define HcBufferStatus 0x2C +#define HcReadBackITL0Length 0x2D +#define HcReadBackITL1Length 0x2E +#define HcITLBufferPort 0x40 +#define HcATLBufferPort 0x41 diff --git a/board/sc3/sc3nand.c b/board/sc3/sc3nand.c new file mode 100644 index 00000000000..7daa877cddc --- /dev/null +++ b/board/sc3/sc3nand.c @@ -0,0 +1,94 @@ +/* + * (C) Copyright 2007 + * Heiko Schocher, DENX Software Engineering, hs@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 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 + */ + +#include + +#if (CONFIG_COMMANDS & CFG_CMD_NAND) + +#include +#include + +#define readb(addr) *(volatile u_char *)(addr) +#define readl(addr) *(volatile u_long *)(addr) +#define writeb(d,addr) *(volatile u_char *)(addr) = (d) + +#define SC3_NAND_ALE 29 /* GPIO PIN 3 */ +#define SC3_NAND_CLE 30 /* GPIO PIN 2 */ +#define SC3_NAND_CE 27 /* GPIO PIN 5 */ + +static void *sc3_io_base; +static void *sc3_control_base = (void *)0xEF600700; + +static void sc3_nand_hwcontrol(struct mtd_info *mtd, int cmd) +{ + switch (cmd) { + case NAND_CTL_SETCLE: + set_bit (SC3_NAND_CLE, sc3_control_base); + break; + case NAND_CTL_CLRCLE: + clear_bit (SC3_NAND_CLE, sc3_control_base); + break; + + case NAND_CTL_SETALE: + set_bit (SC3_NAND_ALE, sc3_control_base); + break; + case NAND_CTL_CLRALE: + clear_bit (SC3_NAND_ALE, sc3_control_base); + break; + + case NAND_CTL_SETNCE: + set_bit (SC3_NAND_CE, sc3_control_base); + break; + case NAND_CTL_CLRNCE: + clear_bit (SC3_NAND_CE, sc3_control_base); + break; + } +} + +static int sc3_nand_dev_ready(struct mtd_info *mtd) +{ + if (!(readl(sc3_control_base + 0x1C) & 0x4000)) + return 0; + return 1; +} + +static void sc3_select_chip(struct mtd_info *mtd, int chip) +{ + clear_bit (SC3_NAND_CE, sc3_control_base); +} + +int board_nand_init(struct nand_chip *nand) +{ + nand->eccmode = NAND_ECC_SOFT; + + sc3_io_base = (void *) CFG_NAND_BASE; + /* Set address of NAND IO lines (Using Linear Data Access Region) */ + nand->IO_ADDR_R = (void __iomem *) sc3_io_base; + nand->IO_ADDR_W = (void __iomem *) sc3_io_base; + /* Reference hardware control function */ + nand->hwcontrol = sc3_nand_hwcontrol; + nand->dev_ready = sc3_nand_dev_ready; + nand->select_chip = sc3_select_chip; + return 0; +} +#endif diff --git a/board/sc3/u-boot.lds b/board/sc3/u-boot.lds new file mode 100644 index 00000000000..dc255d283ec --- /dev/null +++ b/board/sc3/u-boot.lds @@ -0,0 +1,150 @@ +/* + * (C) Copyright 2000 + * 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 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 + */ + +OUTPUT_ARCH(powerpc) +SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib); +/* Do we need any of these for elf? + __DYNAMIC = 0; */ +SECTIONS +{ + .resetvec 0xFFFFFFFC : + { + *(.resetvec) + } = 0xffff + + /* Read-only sections, merged into text segment: */ + . = + SIZEOF_HEADERS; + .interp : { *(.interp) } + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .rel.text : { *(.rel.text) } + .rela.text : { *(.rela.text) } + .rel.data : { *(.rel.data) } + .rela.data : { *(.rela.data) } + .rel.rodata : { *(.rel.rodata) } + .rela.rodata : { *(.rela.rodata) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.bss : { *(.rel.bss) } + .rela.bss : { *(.rela.bss) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } + .init : { *(.init) } + .plt : { *(.plt) } + .text : + { + /* WARNING - the following is hand-optimized to fit within */ + /* the sector layout of our flash chips! XXX FIXME XXX */ + + cpu/ppc4xx/start.o (.text) + board/sc3/init.o (.text) + cpu/ppc4xx/kgdb.o (.text) + cpu/ppc4xx/traps.o (.text) + cpu/ppc4xx/interrupts.o (.text) + cpu/ppc4xx/serial.o (.text) + cpu/ppc4xx/cpu_init.o (.text) + cpu/ppc4xx/speed.o (.text) + common/dlmalloc.o (.text) + lib_generic/crc32.o (.text) + lib_ppc/extable.o (.text) + lib_generic/zlib.o (.text) + +/* . = env_offset;*/ +/* common/environment.o(.text)*/ + + *(.text) + *(.fixup) + *(.got1) + } + _etext = .; + PROVIDE (etext = .); + .rodata : + { + *(.rodata) + *(.rodata1) + *(.rodata.str1.4) + *(.eh_frame) + } + .fini : { *(.fini) } =0 + .ctors : { *(.ctors) } + .dtors : { *(.dtors) } + + /* Read-write section, merged into data segment: */ + . = (. + 0x00FF) & 0xFFFFFF00; + _erotext = .; + PROVIDE (erotext = .); + .reloc : + { + *(.got) + _GOT2_TABLE_ = .; + *(.got2) + _FIXUP_TABLE_ = .; + *(.fixup) + } + __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2; + __fixup_entries = (. - _FIXUP_TABLE_)>>2; + + .data : + { + *(.data) + *(.data1) + *(.sdata) + *(.sdata2) + *(.dynamic) + CONSTRUCTORS + } + _edata = .; + PROVIDE (edata = .); + + . = .; + __u_boot_cmd_start = .; + .u_boot_cmd : { *(.u_boot_cmd) } + __u_boot_cmd_end = .; + + __start___ex_table = .; + __ex_table : { *(__ex_table) } + __stop___ex_table = .; + + . = ALIGN(256); + __init_begin = .; + .text.init : { *(.text.init) } + .data.init : { *(.data.init) } + . = ALIGN(256); + __init_end = .; + + __bss_start = .; + .bss : + { + *(.sbss) *(.scommon) + *(.dynbss) + *(.bss) + *(COMMON) + } + _end = . ; + PROVIDE (end = .); +} diff --git a/board/solidcard3/Makefile b/board/solidcard3/Makefile deleted file mode 100644 index 1b0b15fc626..00000000000 --- a/board/solidcard3/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -# -# (C) Copyright 2000 -# 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 -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# 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 -# - -include $(TOPDIR)/config.mk - -LIB = lib$(BOARD).a - -OBJS = $(BOARD).o sc3nand.o -SOBJS = init.o - -$(LIB): $(OBJS) $(SOBJS) - $(AR) crv $@ $^ - -clean: - rm -f $(SOBJS) $(OBJS) - -distclean: clean - rm -f $(LIB) core *.bak .depend - -######################################################################### - -.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) - $(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ - -sinclude .depend - -######################################################################### diff --git a/board/solidcard3/config.mk b/board/solidcard3/config.mk deleted file mode 100644 index 1bdf5e4fcf3..00000000000 --- a/board/solidcard3/config.mk +++ /dev/null @@ -1,24 +0,0 @@ -# -# (C) Copyright 2000 -# 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 -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# 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 -# - -TEXT_BASE = 0xFFFC0000 diff --git a/board/solidcard3/init.S b/board/solidcard3/init.S deleted file mode 100644 index e7b3c839492..00000000000 --- a/board/solidcard3/init.S +++ /dev/null @@ -1,382 +0,0 @@ -/*------------------------------------------------------------------------------+ - * - * This souce code has been made available to you by EuroDesign - * (www.eurodsn.de). It's based on the original IBM source code, so - * this follows: - * - * This source code has been made available to you by IBM on an AS-IS - * basis. Anyone receiving this source is licensed under IBM - * copyrights to use it in any way he or she deems fit, including - * copying it, modifying it, compiling it, and redistributing it either - * with or without modifications. No license under IBM patents or - * patent applications is to be implied by the copyright license. - * - * Any user of this software should understand that IBM cannot provide - * technical support for this software and will not be responsible for - * any consequences resulting from the use of this software. - * - * Any person who transfers this source code or any derivative work - * must include the IBM copyright notice, this paragraph, and the - * preceding two paragraphs in the transferred software. - * - * COPYRIGHT I B M CORPORATION 1995 - * LICENSED MATERIAL - PROGRAM PROPERTY OF I B M - *------------------------------------------------------------------------------- */ - -#include -#include - -#define _LINUX_CONFIG_H 1 /* avoid reading Linux autoconf.h file */ - -#include -#include - -#include -#include - -/** - * ext_bus_cntlr_init - Initializes the External Bus Controller for the external peripherals - * - * IMPORTANT: For pass1 this code must run from cache since you can not - * reliably change a peripheral banks timing register (pbxap) while running - * code from that bank. For ex., since we are running from ROM on bank 0, we - * can NOT execute the code that modifies bank 0 timings from ROM, so - * we run it from cache. - * - * Bank 0 - Boot-Flash - * Bank 1 - NAND-Flash - * Bank 2 - ISA bus - * Bank 3 - Second Flash - * Bank 4 - USB controller - */ - .globl ext_bus_cntlr_init -ext_bus_cntlr_init: -/* - * We need the current boot up configuration to set correct - * timings into internal flash and external flash - */ - mfdcr r24,strap /* xxxx xxxx xxxx xxx? ?xxx xxxx xxxx xxxx - 0 0 -> 8 bit external ROM - 0 1 -> 16 bit internal ROM */ - addi r4,0,2 - srw r24,r24,r4 /* shift right r24 two positions */ - andi. r24,r24,0x06000 -/* - * All calculations are based on 33MHz EBC clock. - * - * First, create a "very slow" timing (~250ns) with burst mode enabled - * This is need for the external flash access - */ - lis r25,0x0800 - ori r25,r25,0x0280 /* 0000 1000 0xxx 0000 0000 0010 100x xxxx = 0x03800280 -/* - * Second, create a fast timing: - * 90ns first cycle - 3 clock access - * and 90ns burst cycle, plus 1 clock after the last access - * This is used for the internal access - */ - lis r26,0x8900 - ori r26,r26,0x0280 /* 1000 1001 0xxx 0000 0000 0010 100x xxxx -/* - * We can't change settings on CS# if we currently use them. - * -> load a few instructions into cache and run this code from cache - */ - mflr r4 /* save link register */ - bl ..getAddr -..getAddr: - mflr r3 /* get address of ..getAddr */ - mtlr r4 /* restore link register */ - addi r4,0,14 /* set ctr to 10; used to prefetch */ - mtctr r4 /* 10 cache lines to fit this function - in cache (gives us 8x10=80 instructions) */ -..ebcloop: - icbt r0,r3 /* prefetch cache line for addr in r3 */ - addi r3,r3,32 /* move to next cache line */ - bdnz ..ebcloop /* continue for 10 cache lines */ -/* - * Delay to ensure all accesses to ROM are complete before changing - * bank 0 timings. 200usec should be enough. - * 200,000,000 (cycles/sec) X .000200 (sec) = 0x9C40 cycles - */ - lis r3,0x0 - ori r3,r3,0xA000 /* ensure 200usec have passed since reset */ - mtctr r3 -..spinlp: - bdnz ..spinlp /* spin loop */ - -/*----------------------------------------------------------------------- - * Memory Bank 0 (BOOT-ROM) initialization - * 0xFFEF00000....0xFFFFFFF - * We only have to change the timing. Mapping is ok by boot-strapping - *----------------------------------------------------------------------- */ - - li r4,pb0ap /* PB0AP=Peripheral Bank 0 Access Parameters */ - mtdcr ebccfga,r4 - - mr r4,r26 /* assume internal fast flash is boot flash */ - cmpwi r24,0x2000 /* assumption true? ... */ - beq 1f /* ...yes! */ - mr r4,r25 /* ...no, use the slow variant */ - mr r25,r26 /* use this for the other flash */ -1: - mtdcr ebccfgd,r4 /* change timing now */ - - li r4,pb0cr /* PB0CR=Peripheral Bank 0 Control Register */ - mtdcr ebccfga,r4 - mfdcr r4,ebccfgd - lis r3,0x0001 - ori r3,r3,0x8000 /* allow reads and writes */ - or r4,r4,r3 - mtdcr ebccfgd,r4 - -/*----------------------------------------------------------------------- - * Memory Bank 3 (Second-Flash) initialization - * 0xF0000000...0xF01FFFFF -> 2MB - *----------------------------------------------------------------------- */ - - li r4,pb3ap /* Peripheral Bank 1 Access Parameter */ - mtdcr ebccfga,r4 - mtdcr ebccfgd,r2 /* change timing */ - - li r4,pb3cr /* Peripheral Bank 1 Configuration Registers */ - mtdcr ebccfga,r4 - - lis r4,0xF003 - ori r4,r4,0x8000 -/* - * Consider boot configuration - */ - xori r24,r24,0x2000 /* invert current bus width */ - or r4,r4,r24 - mtdcr ebccfgd,r4 - -/*----------------------------------------------------------------------- - * Memory Bank 1 (NAND-Flash) initialization - * 0x77D00000...0x77DFFFFF -> 1MB - * - the write/read pulse to the NAND can be as short as 25ns, bus the cycle time is always 50ns - * - the setup time is 0ns - * - the hold time is 15ns - * -> - * - TWT = 0 - * - CSN = 0 - * - OEN = 0 - * - WBN = 0 - * - WBF = 0 - * - TH = 1 - * ----> 2 clocks per cycle = 60ns cycle (30ns active, 30ns hold) - *----------------------------------------------------------------------- */ - - li r4,pb1ap /* Peripheral Bank 1 Access Parameter */ - mtdcr ebccfga,r4 - - lis r4,0x0000 - ori r4,r4,0x0200 - mtdcr ebccfgd,r4 - - li r4,pb1cr /* Peripheral Bank 1 Configuration Registers */ - mtdcr ebccfga,r4 - - lis r4,0x77D1 - ori r4,r4,0x8000 - mtdcr ebccfgd,r4 - - -/* USB init (without acceleration) */ -#ifndef CONFIG_ISP1161_PRESENT - li r4,pb4ap /* PB4AP=Peripheral Bank 4 Access Parameters */ - mtdcr ebccfga,r4 - lis r4,0x0180 - ori r4,r4,0x5940 - mtdcr ebccfgd,r4 -#endif - -/*----------------------------------------------------------------------- - * Memory Bank 2 (ISA Access) initialization (plus memory bank 6 and 7) - * 0x78000000...0x7BFFFFFF -> 64 MB - * Wir arbeiten bei 33 MHz -> 30ns - *----------------------------------------------------------------------- - - A7 (ppc notation) or A24 (standard notation) decides about - the type of access: - A7/A24=0 -> memory cycle - A7/ /A24=1 -> I/O cycle -*/ - li r4,pb2ap /* PB2AP=Peripheral Bank 2 Access Parameters */ - mtdcr ebccfga,r4 -/* - We emulate an ISA access - - 1. Address active - 2. wait 0 EBC clocks -> CSN=0 - 3. set CS# - 4. wait 0 EBC clock -> OEN/WBN=0 - 5. set OE#/WE# - 6. wait 4 clocks (ca. 90ns) and for Ready signal - 7. hold for 4 clocks -> TH=4 -*/ - -#if 1 -/* faster access to isa-bus */ - lis r4,0x0180 - ori r4,r4,0x5940 -#else - lis r4,0x0100 - ori r4,r4,0x0340 -#endif - mtdcr ebccfgd,r4 - -#ifdef IDE_USES_ISA_EMULATION - li r25,pb5ap /* PB5AP=Peripheral Bank 5 Access Parameters */ - mtdcr ebccfga,r25 - mtdcr ebccfgd,r4 -#endif - - li r25,pb6ap /* PB6AP=Peripheral Bank 6 Access Parameters */ - mtdcr ebccfga,r25 - mtdcr ebccfgd,r4 - li r25,pb7ap /* PB7AP=Peripheral Bank 7 Access Parameters */ - mtdcr ebccfga,r25 - mtdcr ebccfgd,r4 - - li r25,pb2cr /* PB2CR=Peripheral Bank 2 Configuration Register */ - mtdcr ebccfga,r25 - - lis r4,0x780B - ori r4,r4,0xA000 - mtdcr ebccfgd,r4 -/* - * the other areas are only 1MiB in size - */ - lis r4,0x7401 - ori r4,r4,0xA000 - - li r25,pb6cr /* PB6CR=Peripheral Bank 6 Configuration Register */ - mtdcr ebccfga,r25 - lis r4,0x7401 - ori r4,r4,0xA000 - mtdcr ebccfgd,r4 - - li r25,pb7cr /* PB7CR=Peripheral Bank 7 Configuration Register */ - mtdcr ebccfga,r25 - lis r4,0x7411 - ori r4,r4,0xA000 - mtdcr ebccfgd,r4 - -#ifndef CONFIG_ISP1161_PRESENT - li r25,pb4cr /* PB4CR=Peripheral Bank 4 Configuration Register */ - mtdcr ebccfga,r25 - lis r4,0x7421 - ori r4,r4,0xA000 - mtdcr ebccfgd,r4 -#endif -#ifdef IDE_USES_ISA_EMULATION - li r25,pb5cr /* PB5CR=Peripheral Bank 5 Configuration Register */ - mtdcr ebccfga,r25 - lis r4,0x0000 - ori r4,r4,0x0000 - mtdcr ebccfgd,r4 -#endif - -/*----------------------------------------------------------------------- - * Memory bank 4: USB controller Philips ISP6111 - * 0x77C00000 ... 0x77CFFFFF - * - * The chip is connected to: - * - CPU CS#4 - * - CPU IRQ#2 - * - CPU DMA 3 - * - * Timing: - * - command to first data: 300ns. Software must ensure this timing! - * - Write pulse: 26ns - * - Read pulse: 33ns - * - read cycle time: 150ns - * - write cycle time: 140ns - * - * Note: All calculations are based on 33MHz EBC clock. One '#' or '_' is 30ns - * - * |- 300ns --| - * |---- 420ns ---|---- 420ns ---| cycle - * CS ############:###____#######:###____####### - * OE ############:####___#######:####___####### - * WE ############:####__########:####__######## - * - * ----> 2 clocks RD/WR pulses: 60ns - * ----> CSN: 3 clock, 90ns - * ----> OEN: 1 clocks (read cycle) - * ----> WBN: 1 clocks (write cycle) - * ----> WBE: 2 clocks - * ----> TH: 7 clock, 210ns - * ----> TWT: 7 clocks - *----------------------------------------------------------------------- */ - -#ifdef CONFIG_ISP1161_PRESENT - - li r4,pb4ap /* PB4AP=Peripheral Bank 4 Access Parameters */ - mtdcr ebccfga,r4 - - lis r4,0x030D - ori r4,r4,0x5E80 - mtdcr ebccfgd,r4 - - li r4,pb4cr /* PB2CR=Peripheral Bank 4 Configuration Register */ - mtdcr ebccfga,r4 - - lis r4,0x77C1 - ori r4,r4,0xA000 - mtdcr ebccfgd,r4 - -#endif - -#ifndef IDE_USES_ISA_EMULATION - -/*----------------------------------------------------------------------- - * Memory Bank 5 used for IDE access - * - * Timings for IDE Interface - * - * SETUP / LENGTH / HOLD - cycles valid for 33.3 MHz clk -> 30ns cycle time - * 70 165 30 PIO-Mode 0, [ns] - * 3 6 1 [Cycles] ----> AP=0x040C0200 - * 50 125 20 PIO-Mode 1, [ns] - * 2 5 1 [Cycles] ----> AP=0x03080200 - * 30 100 15 PIO-Mode 2, [ns] - * 1 4 1 [Cycles] ----> AP=0x02040200 - * 30 80 10 PIO-Mode 3, [ns] - * 1 3 1 [Cycles] ----> AP=0x01840200 - * 25 70 10 PIO-Mode 4, [ns] - * 1 3 1 [Cycles] ----> AP=0x01840200 - * - *----------------------------------------------------------------------- */ - - li r4,pb5ap - mtdcr ebccfga,r4 - lis r4,0x040C - ori r4,r4,0x0200 - mtdcr ebccfgd,r4 - - li r4,pb5cr /* PB2CR=Peripheral Bank 2 Configuration Register */ - mtdcr ebccfga,r4 - - lis r4,0x7A01 - ori r4,r4,0xA000 - mtdcr ebccfgd,r4 -#endif -/* - * External Peripheral Control Register - */ - li r4,epcr - mtdcr ebccfga,r4 - - lis r4,0xB84E - ori r4,r4,0xF000 - mtdcr ebccfgd,r4 -/* - * drive POST code - */ - lis r4,0x7900 - ori r4,r4,0x0080 - li r3,0x0001 - stb r3,0(r4) /* 01 -> external bus controller is initialized */ - nop /* pass2 DCR errata #8 */ - blr diff --git a/board/solidcard3/sc3nand.c b/board/solidcard3/sc3nand.c deleted file mode 100644 index 7daa877cddc..00000000000 --- a/board/solidcard3/sc3nand.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * (C) Copyright 2007 - * Heiko Schocher, DENX Software Engineering, hs@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 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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 - */ - -#include - -#if (CONFIG_COMMANDS & CFG_CMD_NAND) - -#include -#include - -#define readb(addr) *(volatile u_char *)(addr) -#define readl(addr) *(volatile u_long *)(addr) -#define writeb(d,addr) *(volatile u_char *)(addr) = (d) - -#define SC3_NAND_ALE 29 /* GPIO PIN 3 */ -#define SC3_NAND_CLE 30 /* GPIO PIN 2 */ -#define SC3_NAND_CE 27 /* GPIO PIN 5 */ - -static void *sc3_io_base; -static void *sc3_control_base = (void *)0xEF600700; - -static void sc3_nand_hwcontrol(struct mtd_info *mtd, int cmd) -{ - switch (cmd) { - case NAND_CTL_SETCLE: - set_bit (SC3_NAND_CLE, sc3_control_base); - break; - case NAND_CTL_CLRCLE: - clear_bit (SC3_NAND_CLE, sc3_control_base); - break; - - case NAND_CTL_SETALE: - set_bit (SC3_NAND_ALE, sc3_control_base); - break; - case NAND_CTL_CLRALE: - clear_bit (SC3_NAND_ALE, sc3_control_base); - break; - - case NAND_CTL_SETNCE: - set_bit (SC3_NAND_CE, sc3_control_base); - break; - case NAND_CTL_CLRNCE: - clear_bit (SC3_NAND_CE, sc3_control_base); - break; - } -} - -static int sc3_nand_dev_ready(struct mtd_info *mtd) -{ - if (!(readl(sc3_control_base + 0x1C) & 0x4000)) - return 0; - return 1; -} - -static void sc3_select_chip(struct mtd_info *mtd, int chip) -{ - clear_bit (SC3_NAND_CE, sc3_control_base); -} - -int board_nand_init(struct nand_chip *nand) -{ - nand->eccmode = NAND_ECC_SOFT; - - sc3_io_base = (void *) CFG_NAND_BASE; - /* Set address of NAND IO lines (Using Linear Data Access Region) */ - nand->IO_ADDR_R = (void __iomem *) sc3_io_base; - nand->IO_ADDR_W = (void __iomem *) sc3_io_base; - /* Reference hardware control function */ - nand->hwcontrol = sc3_nand_hwcontrol; - nand->dev_ready = sc3_nand_dev_ready; - nand->select_chip = sc3_select_chip; - return 0; -} -#endif diff --git a/board/solidcard3/solidcard3.c b/board/solidcard3/solidcard3.c deleted file mode 100644 index 21cc031ef9e..00000000000 --- a/board/solidcard3/solidcard3.c +++ /dev/null @@ -1,779 +0,0 @@ -/* - * (C) Copyright 2007 - * Heiko Schocher, DENX Software Engineering, . - * - * (C) Copyright 2003 - * Juergen Beisert, EuroDesign embedded technologies, info@eurodsn.de - * Derived from walnut.c - * - * (C) Copyright 2000 - * 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 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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 - * - * $Log:$ - */ - -#include -#include -#include -#include "solidcard3.h" -#include -#include -#include - -#undef writel -#undef writeb -#define writeb(b,addr) ((*(volatile u8 *) (addr)) = (b)) -#define writel(b,addr) ((*(volatile u32 *) (addr)) = (b)) - -/* write only register to configure things in our CPLD */ -#define CPLD_CONTROL_1 0x79000102 -#define CPLD_VERSION 0x79000103 - -#define IS_CAMERON ((*(unsigned char *)(CPLD_VERSION)== 0x32) ? 1 : 0) - -static struct pci_controller hose={0,}; - -/************************************************************ - * Standard definition - ************************************************************/ - -/* CPC0_CR0 Function ISA bus - - GPIO0 - - GPIO1 -> Output: NAND-Command Latch Enable - - GPIO2 -> Output: NAND Address Latch Enable - - GPIO3 -> IRQ input ISA-IRQ #5 (through CPLD) - - GPIO4 -> Output: NAND-Chip Enable - - GPIO5 -> IRQ input ISA-IRQ#7 (through CPLD) - - GPIO6 -> IRQ input ISA-IRQ#9 (through CPLD) - - GPIO7 -> IRQ input ISA-IRQ#10 (through CPLD) - - GPIO8 -> IRQ input ISA-IRQ#11 (through CPLD) - - GPIO9 -> IRQ input ISA-IRQ#12 (through CPLD) - - GPIO10/CS1# -> CS1# NAND ISA-CS#0 - - GPIO11/CS2# -> CS2# ISA emulation ISA-CS#1 - - GPIO12/CS3# -> CS3# 2nd Flash-Bank ISA-CS#2 or ISA-CS#7 - - GPIO13/CS4# -> CS4# USB HC or ISA emulation ISA-CS#3 - - GPIO14/CS5# -> CS5# Boosted IDE access ISA-CS#4 - - GPIO15/CS6# -> CS6# ISA emulation ISA-CS#5 - - GPIO16/CS7# -> CS7# ISA emulation ISA-CS#6 - - GPIO17/IRQ0 -> GPIO, in, NAND-Ready/Busy# line ISA-IRQ#3 - - GPIO18/IRQ1 -> IRQ input ISA-IRQ#14 - - GPIO19/IRQ2 -> IRQ input or USB ISA-IRQ#4 - - GPIO20/IRQ3 -> IRQ input PCI-IRQ#D - - GPIO21/IRQ4 -> IRQ input PCI-IRQ#C - - GPIO22/IRQ5 -> IRQ input PCI-IRQ#B - - GPIO23/IRQ6 -> IRQ input PCI-IRQ#A - - GPIO24 -> if GPIO output: 0=JTAG CPLD activ, 1=JTAG CPLD inactiv -*/ -/* -| CPLD register: io-space at offset 0x102 (write only) -| 0 -| 1 -| 2 0=CS#4 USB CS#, 1=ISA or GP bus -| 3 -| 4 -| 5 -| 6 1=enable faster IDE access -| 7 -*/ -#define USB_CHIP_ENABLE 0x04 -#define IDE_BOOSTING 0x40 - -/* --------------- USB stuff ------------------------------------- */ -#ifdef CONFIG_ISP1161_PRESENT -/** - * initUsbHost- Initialize the Philips isp1161 HC part if present - * @cpldConfig: Pointer to value in write only CPLD register - * - * Initialize the USB host controller if present and fills the - * scratch register to inform the driver about used resources - */ - -static void initUsbHost (unsigned char *cpldConfig) -{ - int i; - unsigned long usbBase; - /* - * Read back where init.S has located the USB chip - */ - mtdcr (0x012, 0x04); - usbBase = mfdcr (0x013); - if (!(usbBase & 0x18000)) /* enabled? */ - return; - usbBase &= 0xFFF00000; - - /* - * to test for the USB controller enable using of CS#4 and DMA 3 for USB access - */ - writeb (*cpldConfig | USB_CHIP_ENABLE,CPLD_CONTROL_1); - - /* - * first check: is the controller assembled? - */ - hcWriteWord (usbBase, 0x5555, HcScratch); - if (hcReadWord (usbBase, HcScratch) == 0x5555) { - hcWriteWord (usbBase, 0xAAAA, HcScratch); - if (hcReadWord (usbBase, HcScratch) == 0xAAAA) { - if ((hcReadWord (usbBase, HcChipID) & 0xFF00) != 0x6100) - return; /* this is not our controller */ - /* - * try a software reset. This needs up to 10 seconds (see datasheet) - */ - hcWriteDWord (usbBase, 0x00000001, HcCommandStatus); - for (i = 1000; i > 0; i--) { /* loop up to 10 seconds */ - udelay (10); - if (!(hcReadDWord (usbBase, HcCommandStatus) & 0x01)) - break; - } - - if (!i) - return; /* the controller doesn't responding. Broken? */ - /* - * OK. USB controller is ready. Initialize it in such way the later driver - * can us it (without any knowing about specific implementation) - */ - hcWriteDWord (usbBase, 0x00000000, HcControl); - /* - * disable all interrupt sources. Because we - * don't know where we come from (hard reset, cold start, soft reset...) - */ - hcWriteDWord (usbBase, 0x8000007D, HcInterruptDisable); - /* - * our current setup hardware configuration - * - every port power supply can switched indepently - * - every port can signal overcurrent - * - every port is "outside" and the devices are removeable - */ - hcWriteDWord (usbBase, 0x32000902, HcRhDescriptorA); - hcWriteDWord (usbBase, 0x00060000, HcRhDescriptorB); - /* - * don't forget to switch off power supply of each port - * The later running driver can reenable them to find and use - * the (maybe) connected devices. - * - */ - hcWriteDWord (usbBase, 0x00000200, HcRhPortStatus1); - hcWriteDWord (usbBase, 0x00000200, HcRhPortStatus2); - hcWriteWord (usbBase, 0x0428, HcHardwareConfiguration); - hcWriteWord (usbBase, 0x0040, HcDMAConfiguration); - hcWriteWord (usbBase, 0x0000, HcuPInterruptEnable); - hcWriteWord (usbBase, 0xA000 | (0x03 << 8) | 27, HcScratch); - /* - * controller is present and usable - */ - *cpldConfig |= USB_CHIP_ENABLE; - } - } -} -#endif - -#if defined(CONFIG_START_IDE) -int board_start_ide(void) -{ - if (IS_CAMERON) { - puts ("no IDE on cameron board.\n"); - return 0; - } - return 1; -} -#endif - -static int sc3_cameron_init (void) -{ - /* Set up the Memory Controller for the CAMERON version */ - mtebc (pb4ap, 0x01805940); - mtebc (pb4cr, 0x7401a000); - mtebc (pb5ap, 0x01805940); - mtebc (pb5cr, 0x7401a000); - mtebc (pb6ap, 0x0); - mtebc (pb6cr, 0x0); - mtebc (pb7ap, 0x0); - mtebc (pb7cr, 0x0); - return 0; -} - -void sc3_read_eeprom (void) -{ - uchar i2c_buffer[18]; - - i2c_read (0x50, 0x03, 1, i2c_buffer, 9); - i2c_buffer[9] = 0; - setenv ("serial#", (char *)i2c_buffer); - - /* read mac-address from eeprom */ - i2c_read (0x50, 0x11, 1, i2c_buffer, 15); - i2c_buffer[17] = 0; - i2c_buffer[16] = i2c_buffer[14]; - i2c_buffer[15] = i2c_buffer[13]; - i2c_buffer[14] = ':'; - i2c_buffer[13] = i2c_buffer[12]; - i2c_buffer[12] = i2c_buffer[11]; - i2c_buffer[11] = ':'; - i2c_buffer[8] = ':'; - i2c_buffer[5] = ':'; - i2c_buffer[2] = ':'; - setenv ("ethaddr", (char *)i2c_buffer); -} - -int board_early_init_f (void) -{ - /* write only register to configure things in our CPLD */ - unsigned char cpldConfig_1=0x00; - -/*-------------------------------------------------------------------------+ -| Interrupt controller setup for the SolidCard III CPU card (plus Evaluation board). -| -| Note: IRQ 0 UART 0, active high; level sensitive -| IRQ 1 UART 1, active high; level sensitive -| IRQ 2 IIC, active high; level sensitive -| IRQ 3 Ext. master, rising edge, edge sensitive -| IRQ 4 PCI, active high; level sensitive -| IRQ 5 DMA Channel 0, active high; level sensitive -| IRQ 6 DMA Channel 1, active high; level sensitive -| IRQ 7 DMA Channel 2, active high; level sensitive -| IRQ 8 DMA Channel 3, active high; level sensitive -| IRQ 9 Ethernet Wakeup, active high; level sensitive -| IRQ 10 MAL System Error (SERR), active high; level sensitive -| IRQ 11 MAL Tx End of Buffer, active high; level sensitive -| IRQ 12 MAL Rx End of Buffer, active high; level sensitive -| IRQ 13 MAL Tx Descriptor Error, active high; level sensitive -| IRQ 14 MAL Rx Descriptor Error, active high; level sensitive -| IRQ 15 Ethernet, active high; level sensitive -| IRQ 16 External PCI SERR, active high; level sensitive -| IRQ 17 ECC Correctable Error, active high; level sensitive -| IRQ 18 PCI Power Management, active high; level sensitive -| -| IRQ 19 (EXT IRQ7 405GPr only) -| IRQ 20 (EXT IRQ8 405GPr only) -| IRQ 21 (EXT IRQ9 405GPr only) -| IRQ 22 (EXT IRQ10 405GPr only) -| IRQ 23 (EXT IRQ11 405GPr only) -| IRQ 24 (EXT IRQ12 405GPr only) -| -| IRQ 25 (EXT IRQ 0) NAND-Flash R/B# (raising edge means flash is ready) -| IRQ 26 (EXT IRQ 1) IDE0 interrupt (x86 = IRQ14). Active high (edge sensitive) -| IRQ 27 (EXT IRQ 2) USB controller -| IRQ 28 (EXT IRQ 3) INT D, VGA; active low; level sensitive -| IRQ 29 (EXT IRQ 4) INT C, Ethernet; active low; level sensitive -| IRQ 30 (EXT IRQ 5) INT B, PC104+ SLOT; active low; level sensitive -| IRQ 31 (EXT IRQ 6) INT A, PC104+ SLOT; active low; level sensitive -| -| Direct Memory Access Controller Signal Polarities -| DRQ0 active high (like ISA) -| ACK0 active low (like ISA) -| EOT0 active high (like ISA) -| DRQ1 active high (like ISA) -| ACK1 active low (like ISA) -| EOT1 active high (like ISA) -| DRQ2 active high (like ISA) -| ACK2 active low (like ISA) -| EOT2 active high (like ISA) -| DRQ3 active high (like ISA) -| ACK3 active low (like ISA) -| EOT3 active high (like ISA) -| -+-------------------------------------------------------------------------*/ - - writeb (cpldConfig_1, CPLD_CONTROL_1); /* disable everything in CPLD */ - - mtdcr (uicsr, 0xFFFFFFFF); /* clear all ints */ - mtdcr (uicer, 0x00000000); /* disable all ints */ - mtdcr (uiccr, 0x00000000); /* set all to be non-critical */ - - if (IS_CAMERON) { - sc3_cameron_init(); - mtdcr (0x0B6, 0x18000000); - mtdcr (uicpr, 0xFFFFFFF0); - mtdcr (uictr, 0x10001030); - } else { - mtdcr (0x0B6, 0x0000000); - mtdcr (uicpr, 0xFFFFFFE0); - mtdcr (uictr, 0x10000020); - } - mtdcr (uicvcr, 0x00000001); /* set vect base=0,INT0 highest priority */ - mtdcr (uicsr, 0xFFFFFFFF); /* clear all ints */ - - /* setup other implementation specific details */ - mtdcr (ecr, 0x60606000); - - mtdcr (cntrl1, 0x000042C0); - - if (IS_CAMERON) { - mtdcr (cntrl0, 0x01380000); - /* Setup the GPIOs */ - writel (0x08008000, 0xEF600700); /* Output states */ - writel (0x00000000, 0xEF600718); /* Open Drain control */ - writel (0x68098000, 0xEF600704); /* Output control */ - } else { - mtdcr (cntrl0,0x00080000); - /* Setup the GPIOs */ - writel (0x08000000, 0xEF600700); /* Output states */ - writel (0x14000000, 0xEF600718); /* Open Drain control */ - writel (0x7C000000, 0xEF600704); /* Output control */ - } - - /* Code decompression disabled */ - mtdcr (kiar, kconf); - mtdcr (kidr, 0x2B); - - /* CPC0_ER: enable sleep mode of (currently) unused components */ - /* CPC0_FR: force unused components into sleep mode */ - mtdcr (cpmer, 0x3F800000); - mtdcr (cpmfr, 0x14000000); - - /* set PLB priority */ - mtdcr (0x87, 0x08000000); - - /* --------------- DMA stuff ------------------------------------- */ - mtdcr (0x126, 0x49200000); - -#ifndef IDE_USES_ISA_EMULATION - cpldConfig_1 |= IDE_BOOSTING; /* enable faster IDE */ - /* cpldConfig |= 0x01; */ /* enable 8.33MHz output, if *not* present on your baseboard */ - writeb (cpldConfig_1, CPLD_CONTROL_1); -#endif - -#ifdef CONFIG_ISP1161_PRESENT - initUsbHost (&cpldConfig_1); - writeb (cpldConfig_1, CPLD_CONTROL_1); -#endif - return(0); -} - -int misc_init_r (void) -{ - char *s1; - int i, xilinx_val; - volatile char *xilinx_adr; - xilinx_adr = (char *)0x79000102; - - *xilinx_adr = 0x00; - -/* customer settings ***************************************** */ -/* - s1 = getenv ("function"); - if (s1) { - if (!strcmp (s1, "Rosho")) { - printf ("function 'Rosho' activated\n"); - *xilinx_adr = 0x40; - } - else { - printf (">>>>>>>>>> function %s not recognized\n",s1); - } - } -*/ - -/* individual settings ***************************************** */ - if ((s1 = getenv ("xilinx"))) { - i=0; - xilinx_val = 0; - while (i < 3 && s1[i]) { - if (s1[i] >= '0' && s1[i] <= '9') - xilinx_val = (xilinx_val << 4) + s1[i] - '0'; - else - if (s1[i] >= 'A' && s1[i] <= 'F') - xilinx_val = (xilinx_val << 4) + s1[i] - 'A' + 10; - else - if (s1[i] >= 'a' && s1[i] <= 'f') - xilinx_val = (xilinx_val << 4) + s1[i] - 'a' + 10; - else { - xilinx_val = -1; - break; - } - i++; - } - if (xilinx_val >= 0 && xilinx_val <=255 && i < 3) { - printf ("Xilinx: set to %s\n", s1); - *xilinx_adr = (unsigned char) xilinx_val; - } else - printf ("Xilinx: rejected value %s\n", s1); - } - return 0; -} - -/* ------------------------------------------------------------------------- - * printCSConfig - * - * Print some informations about chips select configurations - * Only used while debugging. - * - * Params: - * - No. of CS pin - * - AP of this CS - * - CR of this CS - * - * Returns - * nothing - ------------------------------------------------------------------------- */ - -#ifdef SC3_DEBUGOUT -static void printCSConfig(int reg,unsigned long ap,unsigned long cr) -{ - const char *bsize[4] = {"8","16","32","?"}; - const unsigned char banks[8] = {1, 2, 4, 8, 16, 32, 64, 128}; - const char *bankaccess[4] = {"disabled", "RO", "WO", "RW"}; - -#define CYCLE 30 /* time of one clock (based on 33MHz) */ - - printf("\nCS#%d",reg); - if (!(cr & 0x00018000)) - puts(" unused"); - else { - if (((cr&0xFFF00000U) & ((banks[(cr & 0x000E0000) >> 17]-1) << 20))) - puts(" Address is not multiple of bank size!"); - - printf("\n -%s bit device", - bsize[(cr & 0x00006000) >> 13]); - printf(" at 0x%08lX", cr & 0xFFF00000U); - printf(" size: %u MB", banks[(cr & 0x000E0000) >> 17]); - printf(" rights: %s", bankaccess[(cr & 0x00018000) >> 15]); - if (ap & 0x80000000) { - printf("\n -Burst device (%luns/%luns)", - (((ap & 0x7C000000) >> 26) + 1) * CYCLE, - (((ap & 0x03800000) >> 23) + 1) * CYCLE); - } else { - printf("\n -Non burst device, active cycle %luns", - (((ap & 0x7F800000) >> 23) + 1) * CYCLE); - printf("\n -Address setup %luns", - ((ap & 0xC0000) >> 18) * CYCLE); - printf("\n -CS active to RD %luns/WR %luns", - ((ap & 0x30000) >> 16) * CYCLE, - ((ap & 0xC000) >> 14) * CYCLE); - printf("\n -WR to CS inactive %luns", - ((ap & 0x3000) >> 12) * CYCLE); - printf("\n -Hold after access %luns", - ((ap & 0xE00) >> 9) * CYCLE); - printf("\n -Ready is %sabled", - ap & 0x100 ? "en" : "dis"); - } - } -} -#endif - -#ifdef SC3_DEBUGOUT - -static unsigned int ap[] = {pb0ap, pb1ap, pb2ap, pb3ap, pb4ap, - pb5ap, pb6ap, pb7ap}; -static unsigned int cr[] = {pb0cr, pb1cr, pb2cr, pb3cr, pb4cr, - pb5cr, pb6cr, pb7cr}; - -static int show_reg (int nr) -{ - unsigned long ul1, ul2; - - mtdcr (ebccfga, ap[nr]); - ul1 = mfdcr (ebccfgd); - mtdcr (ebccfga, cr[nr]); - ul2 = mfdcr(ebccfgd); - printCSConfig(nr, ul1, ul2); - return 0; -} -#endif - -int checkboard (void) -{ -#ifdef SC3_DEBUGOUT - unsigned long ul1; - int i; - - for (i = 0; i < 8; i++) { - show_reg (i); - } - - mtdcr (ebccfga, epcr); - ul1 = mfdcr (ebccfgd); - - puts ("\nGeneral configuration:\n"); - - if (ul1 & 0x80000000) - printf(" -External Bus is always driven\n"); - - if (ul1 & 0x400000) - printf(" -CS signals are always driven\n"); - - if (ul1 & 0x20000) - printf(" -PowerDown after %lu clocks\n", - (ul1 & 0x1F000) >> 7); - - switch (ul1 & 0xC0000) - { - case 0xC0000: - printf(" -No external master present\n"); - break; - case 0x00000: - printf(" -8 bit external master present\n"); - break; - case 0x40000: - printf(" -16 bit external master present\n"); - break; - case 0x80000: - printf(" -32 bit external master present\n"); - break; - } - - switch (ul1 & 0x300000) - { - case 0x300000: - printf(" -Prefetch: Illegal setting!\n"); - break; - case 0x000000: - printf(" -1 doubleword prefetch\n"); - break; - case 0x100000: - printf(" -2 doublewords prefetch\n"); - break; - case 0x200000: - printf(" -4 doublewords prefetch\n"); - break; - } - putc ('\n'); -#endif - printf("Board: SolidCard III %s %s version.\n", - (IS_CAMERON ? "Cameron" : "Eurodesign"), CONFIG_SC3_VERSION); - return 0; -} - -static int printSDRAMConfig(char reg, unsigned long cr) -{ - const int bisize[8]={4, 8, 16, 32, 64, 128, 256, 0}; -#ifdef SC3_DEBUGOUT - const char *basize[8]= - {"4", "8", "16", "32", "64", "128", "256", "Reserved"}; - - printf("SDRAM bank %d",reg); - - if (!(cr & 0x01)) - puts(" disabled\n"); - else { - printf(" at 0x%08lX, size %s MB",cr & 0xFFC00000,basize[(cr&0xE0000)>>17]); - printf(" mode %lu\n",((cr & 0xE000)>>13)+1); - } -#endif - - if (cr & 0x01) - return(bisize[(cr & 0xE0000) >> 17]); - - return 0; -} - -#ifdef SC3_DEBUGOUT -static unsigned int mbcf[] = {mem_mb0cf, mem_mb1cf, mem_mb2cf, mem_mb3cf}; -#endif - -long int initdram (int board_type) -{ - unsigned int mems=0; - unsigned long ul1; - -#ifdef SC3_DEBUGOUT - unsigned long ul2; - int i; - - puts("\nSDRAM configuration:\n"); - - mtdcr (memcfga, mem_mcopt1); - ul1 = mfdcr(memcfgd); - - if (!(ul1 & 0x80000000)) { - puts(" Controller disabled\n"); - return 0; - } - for (i = 0; i < 4; i++) { - mtdcr (memcfga, mbcf[i]); - ul1 = mfdcr (memcfgd); - mems += printSDRAMConfig (i, ul1); - } - - mtdcr (memcfga, mem_sdtr1); - ul1 = mfdcr(memcfgd); - - printf ("Timing:\n -CAS latency %lu\n", ((ul1 & 0x1800000) >> 23)+1); - printf (" -Precharge %lu (PTA) \n", ((ul1 & 0xC0000) >> 18) + 1); - printf (" -R/W to Precharge %lu (CTP)\n", ((ul1 & 0x30000) >> 16) + 1); - printf (" -Leadoff %lu\n", ((ul1 & 0xC000) >> 14) + 1); - printf (" -CAS to RAS %lu\n", ((ul1 & 0x1C) >> 2) + 4); - printf (" -RAS to CAS %lu\n", ((ul1 & 0x3) + 1)); - puts ("Misc:\n"); - mtdcr (memcfga, mem_rtr); - ul1 = mfdcr(memcfgd); - printf (" -Refresh rate: %luns\n", (ul1 >> 16) * 7); - - mtdcr(memcfga,mem_pmit); - ul2=mfdcr(memcfgd); - - mtdcr(memcfga,mem_mcopt1); - ul1=mfdcr(memcfgd); - - if (ul1 & 0x20000000) - printf(" -Power Down after: %luns\n", - ((ul2 & 0xFFC00000) >> 22) * 7); - else - puts(" -Power Down disabled\n"); - - if (ul1 & 0x40000000) - printf(" -Self refresh feature active\n"); - else - puts(" -Self refresh disabled\n"); - - if (ul1 & 0x10000000) - puts(" -ECC enabled\n"); - else - puts(" -ECC disabled\n"); - - if (ul1 & 0x8000000) - puts(" -Using registered SDRAM\n"); - - if (!(ul1 & 0x6000000)) - puts(" -Using 32 bit data width\n"); - else - puts(" -Illegal data width!\n"); - - if (ul1 & 0x400000) - puts(" -ECC drivers inactive\n"); - else - puts(" -ECC drivers active\n"); - - if (ul1 & 0x200000) - puts(" -Memory lines always active outputs\n"); - else - puts(" -Memory lines only at write cycles active outputs\n"); - - mtdcr (memcfga, mem_status); - ul1 = mfdcr (memcfgd); - if (ul1 & 0x80000000) - puts(" -SDRAM Controller ready\n"); - else - puts(" -SDRAM Controller not ready\n"); - - if (ul1 & 0x4000000) - puts(" -SDRAM in self refresh mode!\n"); - - return (mems * 1024 * 1024); -#else - mtdcr (memcfga, mem_mb0cf); - ul1 = mfdcr (memcfgd); - mems = printSDRAMConfig (0, ul1); - - mtdcr (memcfga, mem_mb1cf); - ul1 = mfdcr (memcfgd); - mems += printSDRAMConfig (1, ul1); - - mtdcr (memcfga, mem_mb2cf); - ul1 = mfdcr(memcfgd); - mems += printSDRAMConfig (2, ul1); - - mtdcr (memcfga, mem_mb3cf); - ul1 = mfdcr(memcfgd); - mems += printSDRAMConfig (3, ul1); - - return (mems * 1024 * 1024); -#endif -} - -static void pci_solidcard3_fixup_irq (struct pci_controller *hose, pci_dev_t dev) -{ -/*-------------------------------------------------------------------------+ - | ,-. ,-. ,-. ,-. ,-. - | INTD# ----|B|-----|P|-. ,-|P|-. ,-| |-. ,-|G| - | |R| |C| \ / |C| \ / |E| \ / |r| - | INTC# ----|I|-----|1|-. `/---|1|-. `/---|t|-. `/---|a| - | |D| |0| \/ |0| \/ |h| \/ |f| - | INTB# ----|G|-----|4|-./`----|4|-./`----|e|-./`----|i| - | |E| |+| /\ |+| /\ |r| /\ |k| - | INTA# ----| |-----| |- `----| |- `----| |- `----| | - | `-' `-' `-' `-' `-' - | Slot 0 10 11 12 13 - | REQ# 0 1 2 * - | GNT# 0 1 2 * - +-------------------------------------------------------------------------*/ - unsigned char int_line = 0xff; - - switch (PCI_DEV(dev)) { - case 10: - int_line = 31; /* INT A */ - POST_OUT(0x42); - break; - - case 11: - int_line = 30; /* INT B */ - POST_OUT(0x43); - break; - - case 12: - int_line = 29; /* INT C */ - POST_OUT(0x44); - break; - - case 13: - int_line = 28; /* INT D */ - POST_OUT(0x45); - break; - } - pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, int_line); -} - -extern void pci_405gp_init(struct pci_controller *hose); -extern void pci_405gp_fixup_irq(struct pci_controller *hose, pci_dev_t dev); -extern void pci_405gp_setup_bridge(struct pci_controller *hose, pci_dev_t dev,struct pci_config_table *entry); -/* - * The following table is used when there is a special need to setup a PCI device. - * For every PCI device found in this table is called the given init function with given - * parameters. So never let all IDs at PCI_ANY_ID. In this case any found device gets the same - * parameters! - * -*/ -static struct pci_config_table pci_solidcard3_config_table[] = -{ -/* Host to PCI Bridge device (405GP) */ - { - vendor: 0x1014, - device: 0x0156, - class: PCI_CLASS_BRIDGE_HOST, - bus: 0, - dev: 0, - func: 0, - config_device: pci_405gp_setup_bridge - }, - { } -}; - -/*-------------------------------------------------------------------------+ - | pci_init_board (Called from pci_init() in drivers/pci.c) - | - | Init the PCI part of the SolidCard III - | - | Params: - * - Pointer to current PCI hose - * - Current Device - * - * Returns - * nothing - +-------------------------------------------------------------------------*/ - -void pci_init_board(void) -{ - POST_OUT(0x41); -/* - * we want the ptrs to RAM not flash (ie don't use init list) - */ - hose.fixup_irq = pci_solidcard3_fixup_irq; - hose.config_table = pci_solidcard3_config_table; - pci_405gp_init(&hose); -} diff --git a/board/solidcard3/solidcard3.h b/board/solidcard3/solidcard3.h deleted file mode 100644 index cf920f9f511..00000000000 --- a/board/solidcard3/solidcard3.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * (C) Copyright 2000 - * 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 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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 - */ - -/** - * hcWriteWord - write a 16 bit value into the USB controller - * @base: base address to access the chip registers - * @value: 16 bit value to write into register @offset - * @offset: register to write the @value into - * - */ -static void inline hcWriteWord (unsigned long base, unsigned int value, - unsigned int offset) -{ - out_le16 ((volatile u16*)(base + 2), offset | 0x80); - out_le16 ((volatile u16*)base, value); -} - -/** - * hcWriteDWord - write a 32 bit value into the USB controller - * @base: base address to access the chip registers - * @value: 32 bit value to write into register @offset - * @offset: register to write the @value into - * - */ - -static void inline hcWriteDWord (unsigned long base, unsigned long value, - unsigned int offset) -{ - out_le16 ((volatile u16*)(base + 2), offset | 0x80); - out_le16 ((volatile u16*)base, value); - out_le16 ((volatile u16*)base, value >> 16); -} - -/** - * hcReadWord - read a 16 bit value from the USB controller - * @base: base address to access the chip registers - * @offset: register to read from - * - * Returns the readed register value - */ - -static unsigned int inline hcReadWord (unsigned long base, unsigned int offset) -{ - out_le16 ((volatile u16*)(base + 2), offset); - return (in_le16 ((volatile u16*)base)); -} - -/** - * hcReadDWord - read a 32 bit value from the USB controller - * @base: base address to access the chip registers - * @offset: register to read from - * - * Returns the readed register value - */ - -static unsigned long inline hcReadDWord (unsigned long base, unsigned int offset) -{ - unsigned long val, val16; - - out_le16 ((volatile u16*)(base + 2), offset); - val = in_le16((volatile u16*)base); - val16 = in_le16((volatile u16*)base); - return (val | (val16 << 16)); -} - -/* control and status registers isp1161 */ -#define HcRevision 0x00 -#define HcControl 0x01 -#define HcCommandStatus 0x02 -#define HcInterruptStatus 0x03 -#define HcInterruptEnable 0x04 -#define HcInterruptDisable 0x05 -#define HcFmInterval 0x0D -#define HcFmRemaining 0x0E -#define HcFmNumber 0x0F -#define HcLSThreshold 0x11 -#define HcRhDescriptorA 0x12 -#define HcRhDescriptorB 0x13 -#define HcRhStatus 0x14 -#define HcRhPortStatus1 0x15 -#define HcRhPortStatus2 0x16 - -#define HcHardwareConfiguration 0x20 -#define HcDMAConfiguration 0x21 -#define HcTransferCounter 0x22 -#define HcuPInterrupt 0x24 -#define HcuPInterruptEnable 0x25 -#define HcChipID 0x27 -#define HcScratch 0x28 -#define HcSoftwareReset 0x29 -#define HcITLBufferLength 0x2A -#define HcATLBufferLength 0x2B -#define HcBufferStatus 0x2C -#define HcReadBackITL0Length 0x2D -#define HcReadBackITL1Length 0x2E -#define HcITLBufferPort 0x40 -#define HcATLBufferPort 0x41 diff --git a/board/solidcard3/u-boot.lds b/board/solidcard3/u-boot.lds deleted file mode 100644 index dcd560112c3..00000000000 --- a/board/solidcard3/u-boot.lds +++ /dev/null @@ -1,150 +0,0 @@ -/* - * (C) Copyright 2000 - * 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 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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 - */ - -OUTPUT_ARCH(powerpc) -SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib); -/* Do we need any of these for elf? - __DYNAMIC = 0; */ -SECTIONS -{ - .resetvec 0xFFFFFFFC : - { - *(.resetvec) - } = 0xffff - - /* Read-only sections, merged into text segment: */ - . = + SIZEOF_HEADERS; - .interp : { *(.interp) } - .hash : { *(.hash) } - .dynsym : { *(.dynsym) } - .dynstr : { *(.dynstr) } - .rel.text : { *(.rel.text) } - .rela.text : { *(.rela.text) } - .rel.data : { *(.rel.data) } - .rela.data : { *(.rela.data) } - .rel.rodata : { *(.rel.rodata) } - .rela.rodata : { *(.rela.rodata) } - .rel.got : { *(.rel.got) } - .rela.got : { *(.rela.got) } - .rel.ctors : { *(.rel.ctors) } - .rela.ctors : { *(.rela.ctors) } - .rel.dtors : { *(.rel.dtors) } - .rela.dtors : { *(.rela.dtors) } - .rel.bss : { *(.rel.bss) } - .rela.bss : { *(.rela.bss) } - .rel.plt : { *(.rel.plt) } - .rela.plt : { *(.rela.plt) } - .init : { *(.init) } - .plt : { *(.plt) } - .text : - { - /* WARNING - the following is hand-optimized to fit within */ - /* the sector layout of our flash chips! XXX FIXME XXX */ - - cpu/ppc4xx/start.o (.text) - board/solidcard3/init.o (.text) - cpu/ppc4xx/kgdb.o (.text) - cpu/ppc4xx/traps.o (.text) - cpu/ppc4xx/interrupts.o (.text) - cpu/ppc4xx/serial.o (.text) - cpu/ppc4xx/cpu_init.o (.text) - cpu/ppc4xx/speed.o (.text) - common/dlmalloc.o (.text) - lib_generic/crc32.o (.text) - lib_ppc/extable.o (.text) - lib_generic/zlib.o (.text) - -/* . = env_offset;*/ -/* common/environment.o(.text)*/ - - *(.text) - *(.fixup) - *(.got1) - } - _etext = .; - PROVIDE (etext = .); - .rodata : - { - *(.rodata) - *(.rodata1) - *(.rodata.str1.4) - *(.eh_frame) - } - .fini : { *(.fini) } =0 - .ctors : { *(.ctors) } - .dtors : { *(.dtors) } - - /* Read-write section, merged into data segment: */ - . = (. + 0x00FF) & 0xFFFFFF00; - _erotext = .; - PROVIDE (erotext = .); - .reloc : - { - *(.got) - _GOT2_TABLE_ = .; - *(.got2) - _FIXUP_TABLE_ = .; - *(.fixup) - } - __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2; - __fixup_entries = (. - _FIXUP_TABLE_)>>2; - - .data : - { - *(.data) - *(.data1) - *(.sdata) - *(.sdata2) - *(.dynamic) - CONSTRUCTORS - } - _edata = .; - PROVIDE (edata = .); - - . = .; - __u_boot_cmd_start = .; - .u_boot_cmd : { *(.u_boot_cmd) } - __u_boot_cmd_end = .; - - __start___ex_table = .; - __ex_table : { *(__ex_table) } - __stop___ex_table = .; - - . = ALIGN(256); - __init_begin = .; - .text.init : { *(.text.init) } - .data.init : { *(.data.init) } - . = ALIGN(256); - __init_end = .; - - __bss_start = .; - .bss : - { - *(.sbss) *(.scommon) - *(.dynbss) - *(.bss) - *(COMMON) - } - _end = . ; - PROVIDE (end = .); -} diff --git a/include/configs/sc3.h b/include/configs/sc3.h new file mode 100644 index 00000000000..2d0278290a2 --- /dev/null +++ b/include/configs/sc3.h @@ -0,0 +1,568 @@ +/* + * (C) Copyright 2007 + * Heiko Schocher, DENX Software Engineering, . + * + * From: + * (C) Copyright 2003 + * Juergen Beisert, EuroDesign embedded technologies, jbeisert@eurodsn.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 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 __CONFIG_H +#define __CONFIG_H + +#undef USE_VGA_GRAPHICS + +/* Memory Map + * 0x00000000 .... 0x03FFFFFF -> RAM (up to 128MiB) + * 0x74000000 .... 0x740FFFFF -> CS#6 + * 0x74100000 .... 0x741FFFFF -> CS#7 + * 0x74200000 .... 0x742FFFFF -> CS4# if no internal USB + * 0x74300000 .... 0x743FFFFF -> CS5# if no boosted IDE + * 0x77C00000 .... 0x77CFFFFF -> CS4# USB HC (1 MiB) + * 0x77D00000 .... 0x77DFFFFF -> CS1# NAND-Flash (1 MiB) + * 0x78000000 .... 0x78FFFFFF -> CS2# ISA-Bus Speicherzugriff (16 MiB) + * 0x79000000 .... 0x7900FFFF -> CS2# ISA-Bus IO-Zugriff (16 MiB, mapped: 64kiB) + * 0x79010000 .... 0x79FFFFFF -> CS2# ISA-Bus IO-Zugriff (mirrored) + * 0x7A000000 .... 0x7A0FFFFF -> CS5# IDE emulation (1MiB) + * + * 0x80000000 .... 0x9FFFFFFF -> PCI-Bus Speicherzugriff (512MiB, mapped: 1:1) + * 0xA0000000 .... 0xBFFFFFFF -> PCI-Bus Speicherzugriff (512MiB, mapped: 0x00000000...0x1FFFFFFF) + * 0xE8000000 .... 0xE800FFFF -> PCI-Bus IO-Zugriff (64kiB, translated to PCI: 0x0000...0xFFFF) + * 0xE8800000 .... 0xEBFFFFFF -> PCI-Bus IO-Zugriff (56MiB, translated to PCI: 0x00800000...0x3FFFFFF) + * 0xEED00000 .... 0xEED00003 -> PCI-Bus + * 0xEF400000 .... 0xEF40003F -> PCI-Bus Local Configuration Registers + * 0xEF40003F .... 0xEF5FFFFF -> reserved + * 0xEF600000 .... 0xEFFFFFFF -> 405GP internal Devices (10 MiB) + * 0xF0000000 .... 0xF01FFFFF -> Flash-ROM (2 MiB) + * 0xF0200000 .... 0xF7FFFFFF -> free for flash devices + * 0xF8000000 .... 0xF8000FFF -> OnChipMemory (4kiB) + * 0xF8001000 .... 0xFFDFFFFF -> free for flash devices + * 0xFFE00000 .... 0xFFFFFFFF -> BOOT-ROM (2 MiB) + */ + +#define CONFIG_SOLIDCARD3 1 +#define CONFIG_4xx 1 +#define CONFIG_405GP 1 + +#define CONFIG_BOARD_EARLY_INIT_F 1 + +/* + * Define IDE_USES_ISA_EMULATION for slower IDE access in the ISA-IO address range + * If undefined, IDE access uses a seperat emulation with higher access speed. + * Consider to inform your Linux IDE driver about the different addresses! + * IDE_USES_ISA_EMULATION is only used if your CONFIG_COMMANDS macro includes + * the CFG_CMD_IDE macro! + */ +#define IDE_USES_ISA_EMULATION + +/*----------------------------------------------------------------------- + * Serial Port + *----------------------------------------------------------------------*/ +#define CONFIG_SERIAL_MULTI +#undef CONFIG_SERIAL_SOFTWARE_FIFO +/* + * define CONFIG_POWER_DOWN if your cpu should power down while waiting for your input + * Works only, if you have enabled the CONFIG_SERIAL_SOFTWARE_FIFO feature + */ +#if CONFIG_SERIAL_SOFTWARE_FIFO + #define CONFIG_POWER_DOWN +#endif + +/* + * define CONFIG_SYS_CLK_FREQ to your base crystal clock in Hz + */ +#define CONFIG_SYS_CLK_FREQ 33333333 + +/* + * define CONFIG_BAUDRATE to the baudrate value you want to use as default + */ +#define CONFIG_BAUDRATE 115200 +#define CONFIG_BOOTDELAY 3 /* autoboot after 3 seconds */ + +#define CONFIG_PREBOOT "echo;" \ + "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \ + "echo" + +#undef CONFIG_BOOTARGS + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "netdev=eth0\0" \ + "nfsargs=setenv bootargs root=/dev/nfs rw " \ + "nfsroot=${serverip}:${rootpath}\0" \ + "ramargs=setenv bootargs root=/dev/ram rw\0" \ + "nand_args=setenv bootargs root=/dev/mtdblock4 rw\0" \ + "addip=setenv bootargs ${bootargs} " \ + "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}" \ + ":${hostname}:${netdev}:off panic=1\0" \ + "flash_nfs=run nfsargs addip;" \ + "bootm ${kernel_addr}\0" \ + "flash_nand=nand_args addip addcon;bootm ${kernel_addr}\0" \ + "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0" \ + "rootpath=/opt/eldk/ppc_4xx\0" \ + "bootfile=/tftpboot/sc3/uImage\0" \ + "kernel_addr=FFE08000\0" \ + "" +#undef CONFIG_BOOTCOMMAND + +#define CONFIG_SILENT_CONSOLE 1 /* enable silent startup */ +#define CFG_DEVICE_NULLDEV 1 /* include nulldev device */ + +#if 1 /* feel free to disable for development */ +#define CONFIG_AUTOBOOT_KEYED /* Enable password protection */ +#define CONFIG_AUTOBOOT_PROMPT "\nSC3 - booting... stop with S\n" +#define CONFIG_AUTOBOOT_DELAY_STR "S" /* 1st "password" */ +#endif + +/* + * define CONFIG_BOOTCOMMAND to the autoboot commands. They will running after + * the CONFIG_BOOTDELAY delay to boot your machine + */ +#define CONFIG_BOOTCOMMAND "bootp;dcache on;bootm" + +/* + * define CONFIG_BOOTARGS to the default kernel parameters. They will used if you don't + * set different values at the u-boot prompt + */ +#ifdef USE_VGA_GRAPHICS + #define CONFIG_BOOTARGS "root=/dev/nfs rw ip=bootp nfsroot=/tftpboot/solidcard3re" +#else + #define CONFIG_BOOTARGS "console=ttyS0,115200 root=/dev/nfs rw ip=bootp" +#endif +/* + * Is the USB host controller assembled? If yes define CONFIG_ISP1161_PRESENT + * This reserves memory bank #4 for this purpose + */ +#undef CONFIG_ISP1161_PRESENT + +#undef CONFIG_LOADS_ECHO /* no echo on for serial download */ +#define CFG_LOADS_BAUD_CHANGE 1 /* allow baudrate change */ + +#define CONFIG_NET_MULTI +/* #define CONFIG_EEPRO100_SROM_WRITE */ +/* #define CONFIG_SHOW_MAC */ +#define CONFIG_EEPRO100 +#define CONFIG_MII 1 /* add 405GP MII PHY management */ +#define CONFIG_PHY_ADDR 1 /* the connected Phy defaults to address 1 */ + +#define CONFIG_COMMANDS \ + (CONFIG_CMD_DFL | \ + CFG_CMD_PCI | \ + CFG_CMD_IRQ | \ + CFG_CMD_NET | \ + CFG_CMD_MII | \ + CFG_CMD_PING | \ + CFG_CMD_NAND | \ + CFG_CMD_I2C | \ + CFG_CMD_IDE | \ + CFG_CMD_DATE | \ + CFG_CMD_DHCP | \ + CFG_CMD_CACHE | \ + CFG_CMD_ELF ) + +/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ +#include + +#undef CONFIG_WATCHDOG /* watchdog disabled */ + +/* + * Miscellaneous configurable options + */ +#define CFG_LONGHELP 1 /* undef to save memory */ +#define CFG_PROMPT "SC3> " /* Monitor Command Prompt */ +#define CFG_CBSIZE 256 /* Console I/O Buffer Size */ + +#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ + +#define CFG_MAXARGS 16 /* max number of command args */ +#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ + +#define CFG_MEMTEST_START 0x0400000 /* memtest works on */ +#define CFG_MEMTEST_END 0x0C00000 /* 4 ... 12 MB in DRAM */ + +/* + * If CFG_EXT_SERIAL_CLOCK, then the UART divisor is 1. + * If CFG_405_UART_ERRATA_59, then UART divisor is 31. + * Otherwise, UART divisor is determined by CPU Clock and CFG_BASE_BAUD value. + * The Linux BASE_BAUD define should match this configuration. + * baseBaud = cpuClock/(uartDivisor*16) + * If CFG_405_UART_ERRATA_59 and 200MHz CPU clock, + * set Linux BASE_BAUD to 403200. + * + * Consider the OPB clock! If it get lower the BASE_BAUD must be lower to + * (see 405GP datasheet for descritpion) + */ +#undef CFG_EXT_SERIAL_CLOCK /* external serial clock */ +#undef CFG_405_UART_ERRATA_59 /* 405GP/CR Rev. D silicon */ +#define CFG_BASE_BAUD 921600 /* internal clock */ + +/* The following table includes the supported baudrates */ +#define CFG_BAUDRATE_TABLE \ + {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400} + +#define CFG_LOAD_ADDR 0x1000000 /* default load address */ +#define CFG_EXTBDINFO 1 /* To use extended board_into (bd_t) */ + +#define CFG_HZ 1000 /* decrementer freq: 1 ms ticks */ + +/*----------------------------------------------------------------------- + * IIC stuff + *----------------------------------------------------------------------- + */ +#define CONFIG_HARD_I2C /* I2C with hardware support */ +#undef CONFIG_SOFT_I2C /* I2C bit-banged */ + +#define I2C_INIT +#define I2C_ACTIVE 0 +#define I2C_TRISTATE 0 + +#define CFG_I2C_SPEED 100000 /* use the standard 100kHz speed */ +#define CFG_I2C_SLAVE 0x7F /* mask valid bits */ + +#define CONFIG_RTC_DS1337 +#define CFG_I2C_RTC_ADDR 0x68 + +/*----------------------------------------------------------------------- + * PCI stuff + *----------------------------------------------------------------------- + */ +#define PCI_HOST_ADAPTER 0 /* configure ar pci adapter */ +#define PCI_HOST_FORCE 1 /* configure as pci host */ +#define PCI_HOST_AUTO 2 /* detected via arbiter enable */ + +#define CONFIG_PCI /* include pci support */ +#define CONFIG_PCI_HOST PCI_HOST_FORCE /* select pci host function */ +#define CONFIG_PCI_PNP /* do pci plug-and-play */ + /* resource configuration */ + +/* If you want to see, whats connected to your PCI bus */ +/* #define CONFIG_PCI_SCAN_SHOW */ + +#define CFG_PCI_SUBSYS_VENDORID 0x0000 /* PCI Vendor ID: to-do!!! */ +#define CFG_PCI_SUBSYS_DEVICEID 0x0000 /* PCI Device ID: to-do!!! */ +#define CFG_PCI_PTM1LA 0x00000000 /* point to sdram */ +#define CFG_PCI_PTM1MS 0x80000001 /* 2GB, enable hard-wired to 1 */ +#define CFG_PCI_PTM1PCI 0x00000000 /* Host: use this pci address */ +#define CFG_PCI_PTM2LA 0x00000000 /* disabled */ +#define CFG_PCI_PTM2MS 0x00000000 /* disabled */ +#define CFG_PCI_PTM2PCI 0x04000000 /* Host: use this pci address */ + +/*----------------------------------------------------------------------- + * External peripheral base address + *----------------------------------------------------------------------- + */ +#if !(CONFIG_COMMANDS & CFG_CMD_IDE) + +#undef CONFIG_IDE_LED /* no led for ide supported */ +#undef CONFIG_IDE_RESET /* no reset for ide supported */ + +/*----------------------------------------------------------------------- + * IDE/ATA stuff + *----------------------------------------------------------------------- + */ +#else /* !(CONFIG_COMMANDS & CFG_CMD_IDE) */ +#define CONFIG_START_IDE 1 /* check, if use IDE */ + +#undef CONFIG_IDE_8xx_DIRECT /* no pcmcia interface required */ +#undef CONFIG_IDE_LED /* no led for ide supported */ +#undef CONFIG_IDE_RESET /* no reset for ide supported */ + +#define CONFIG_ATAPI +#define CONFIG_DOS_PARTITION +#define CFG_IDE_MAXDEVICE (CFG_IDE_MAXBUS*1) /* max. 1 drives per IDE bus */ + +#ifndef IDE_USES_ISA_EMULATION + +/* New and faster access */ +#define CFG_ATA_BASE_ADDR 0x7A000000 /* start of ISA IO emulation */ + +/* How many IDE busses are available */ +#define CFG_IDE_MAXBUS 1 + +/* What IDE ports are available */ +#define CFG_ATA_IDE0_OFFSET 0x000 /* first is available */ +#undef CFG_ATA_IDE1_OFFSET /* second not available */ + +/* access to the data port is calculated: + CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_DATA_OFFSET + 0 */ +#define CFG_ATA_DATA_OFFSET 0x0000 /* Offset for data I/O */ + +/* access to the registers is calculated: + CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_REG_OFFSET + [1..7] */ +#define CFG_ATA_REG_OFFSET 0x0000 /* Offset for normal register accesses */ + +/* access to the alternate register is calculated: + CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_ALT_OFFSET + 6 */ +#define CFG_ATA_ALT_OFFSET 0x008 /* Offset for alternate registers */ + +#else /* IDE_USES_ISA_EMULATION */ + +#define CFG_ATA_BASE_ADDR 0x79000000 /* start of ISA IO emulation */ + +/* How many IDE busses are available */ +#define CFG_IDE_MAXBUS 1 + +/* What IDE ports are available */ +#define CFG_ATA_IDE0_OFFSET 0x01F0 /* first is available */ +#undef CFG_ATA_IDE1_OFFSET /* second not available */ + +/* access to the data port is calculated: + CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_DATA_OFFSET + 0 */ +#define CFG_ATA_DATA_OFFSET 0x0000 /* Offset for data I/O */ + +/* access to the registers is calculated: + CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_REG_OFFSET + [1..7] */ +#define CFG_ATA_REG_OFFSET 0x0000 /* Offset for normal register accesses */ + +/* access to the alternate register is calculated: + CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_ALT_OFFSET + 6 */ +#define CFG_ATA_ALT_OFFSET 0x03F0 /* Offset for alternate registers */ + +#endif /* IDE_USES_ISA_EMULATION */ + +#endif /* !(CONFIG_COMMANDS & CFG_CMD_IDE) */ + +/* +#define CFG_KEY_REG_BASE_ADDR 0xF0100000 +#define CFG_IR_REG_BASE_ADDR 0xF0200000 +#define CFG_FPGA_REG_BASE_ADDR 0xF0300000 +*/ + +/*----------------------------------------------------------------------- + * Start addresses for the final memory configuration + * (Set up by the startup code) + * Please note that CFG_SDRAM_BASE _must_ start at 0 + * + * CFG_FLASH_BASE -> start address of internal flash + * CFG_MONITOR_BASE -> start of u-boot + */ +#ifndef __ASSEMBLER__ +extern unsigned long offsetOfBigFlash; +extern unsigned long offsetOfEnvironment; +#endif + +#define CFG_SDRAM_BASE 0x00000000 +#define CFG_FLASH_BASE 0xFFE00000 +#define CFG_MONITOR_BASE 0xFFFC0000 /* placed last 256k */ +#define CFG_MONITOR_LEN (224 * 1024) /* Reserve 224 KiB for Monitor */ +#define CFG_MALLOC_LEN (128 * 1024) /* Reserve 128 KiB for malloc() */ + +/* + * For booting Linux, the board info and command line data + * have to be in the first 8 MiB of memory, since this is + * the maximum mapped by the Linux kernel during initialization. + */ +#define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */ +/*----------------------------------------------------------------------- + * FLASH organization ## FIXME: lookup in datasheet + */ +#define CFG_MAX_FLASH_BANKS 2 /* max number of memory banks */ +#define CFG_MAX_FLASH_SECT 256 /* max number of sectors on one chip */ + +#define CFG_FLASH_CFI /* flash is CFI compat. */ +#define CFG_FLASH_CFI_DRIVER /* Use common CFI driver*/ +#define CFG_FLASH_EMPTY_INFO /* print 'E' for empty sector */ +#define CFG_FLASH_QUIET_TEST 1 /* don't warn upon unknown flash*/ +#define CFG_FLASH_ERASE_TOUT 120000 /* Timeout for Flash Erase (in ms) */ +#define CFG_FLASH_WRITE_TOUT 500 /* Timeout for Flash Write (in ms) */ + +#define CFG_ENV_IS_IN_FLASH 1 +#if CFG_ENV_IS_IN_FLASH +#define CFG_ENV_OFFSET 0x00000000 /* Offset of Environment Sector in bottom type */ +#define CFG_ENV_SIZE 0x4000 /* Total Size of Environment Sector */ +#define CFG_ENV_SECT_SIZE 0x4000 /* see README - env sector total size */ + +/* Address and size of Redundant Environment Sector */ +#define CFG_ENV_OFFSET_REDUND (CFG_ENV_OFFSET+CFG_ENV_SIZE) +#define CFG_ENV_SIZE_REDUND (CFG_ENV_SIZE) + +#endif +/* let us changing anything in our environment */ +#define CONFIG_ENV_OVERWRITE + +/* + * NAND-FLASH stuff + */ +#define CFG_MAX_NAND_DEVICE 1 +#define NAND_MAX_CHIPS 1 +#define CFG_NAND_BASE 0x77D00000 + +/*----------------------------------------------------------------------- + * Cache Configuration + * + * CFG_DCACHE_SIZE -> size of data cache: + * - 405GP 8k + * - 405GPr 16k + * How to handle the difference in chache size? + * CFG_CACHELINE_SIZE -> size of one cache line: 32 bytes + * (used in cpu/ppc4xx/start.S) +*/ +#define CFG_DCACHE_SIZE 16384 + +#define CFG_CACHELINE_SIZE 32 + +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) + #define CFG_CACHELINE_SHIFT 5 /* log base 2 of the above value */ +#endif + +/* + * Init Memory Controller: + * + */ + +#define FLASH_BASE0_PRELIM CFG_FLASH_BASE +#define FLASH_BASE1_PRELIM 0 + +/*----------------------------------------------------------------------- + * Some informations about the internal SRAM (OCM=On Chip Memory) + * + * CFG_OCM_DATA_ADDR -> location + * CFG_OCM_DATA_SIZE -> size +*/ + +#define CFG_TEMP_STACK_OCM 1 +#define CFG_OCM_DATA_ADDR 0xF8000000 +#define CFG_OCM_DATA_SIZE 0x1000 + +/*----------------------------------------------------------------------- + * Definitions for initial stack pointer and data area (in DPRAM): + * - we are using the internal 4k SRAM, so we don't need data cache mapping + * - internal SRAM (OCM=On Chip Memory) is placed to CFG_OCM_DATA_ADDR + * - Stackpointer will be located to + * (CFG_INIT_RAM_ADDR&0xFFFF0000) | (CFG_INIT_SP_OFFSET&0x0000FFFF) + * in cpu/ppc4xx/start.S + */ + +#undef CFG_INIT_DCACHE_CS +/* Where the internal SRAM starts */ +#define CFG_INIT_RAM_ADDR CFG_OCM_DATA_ADDR +/* Where the internal SRAM ends (only offset) */ +#define CFG_INIT_RAM_END 0x0F00 + +/* + + CFG_INIT_RAM_ADDR ------> ------------ lower address + | | + | ^ | + | | | + | | Stack | + CFG_GBL_DATA_OFFSET ----> ------------ + | | + | 64 Bytes | + | | + CFG_INIT_RAM_END ------> ------------ higher address + (offset only) + +*/ +/* size in bytes reserved for initial data */ +#define CFG_GBL_DATA_SIZE 64 +#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) +/* Initial value of the stack pointern in internal SRAM */ +#define CFG_INIT_SP_OFFSET CFG_GBL_DATA_OFFSET + +/* + * Internal Definitions + * + * Boot Flags + */ +#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */ +#define BOOTFLAG_WARM 0x02 /* Software reboot */ + +/* ################################################################################### */ +/* These defines will be used in cpu/ppc4xx/cpu_init.c to setup external chip selects */ +/* They are currently undefined cause they are initiaized in board/solidcard3/init.S */ + +/* This chip select accesses the boot device */ +/* It depends on boot select switch if this device is 16 or 8 bit */ + +#undef CFG_EBC_PB0AP +#undef CFG_EBC_PB0CR + +#undef CFG_EBC_PB1AP +#undef CFG_EBC_PB1CR + +#undef CFG_EBC_PB2AP +#undef CFG_EBC_PB2CR + +#undef CFG_EBC_PB3AP +#undef CFG_EBC_PB3CR + +#undef CFG_EBC_PB4AP +#undef CFG_EBC_PB4CR + +#undef CFG_EBC_PB5AP +#undef CFG_EBC_PB5CR + +#undef CFG_EBC_PB6AP +#undef CFG_EBC_PB6CR + +#undef CFG_EBC_PB7AP +#undef CFG_EBC_PB7CR + +#define CONFIG_SDRAM_BANK0 /* use the standard SDRAM initialization */ +#undef CONFIG_SPD_EEPROM + +/* + * Define this to get more information about system configuration + */ +/* #define SC3_DEBUGOUT */ +#undef SC3_DEBUGOUT + +/*********************************************************************** + * External peripheral base address + ***********************************************************************/ + +#define CFG_ISA_MEM_BASE_ADDRESS 0x78000000 +/* + Die Grafik-Treiber greifen über die Adresse in diesem Macro auf den Chip zu. + Das funktioniert bei deren Karten, weil sie eine PCI-Bridge benutzen, die + das gleiche Mapping durchführen kann, wie der SC520 (also Aufteilen von IO-Zugriffen + auf ISA- und PCI-Zyklen) + */ +#define CFG_ISA_IO_BASE_ADDRESS 0xE8000000 +/*#define CFG_ISA_IO_BASE_ADDRESS 0x79000000 */ + +/************************************************************ + * Video support + ************************************************************/ + +#ifdef USE_VGA_GRAPHICS +#define CONFIG_VIDEO /* To enable video controller support */ +#define CONFIG_VIDEO_CT69000 +#define CONFIG_CFB_CONSOLE +/* #define CONFIG_VIDEO_LOGO */ +#define CONFIG_VGA_AS_SINGLE_DEVICE +#define CONFIG_VIDEO_SW_CURSOR +/* #define CONFIG_VIDEO_HW_CURSOR */ +#define CONFIG_VIDEO_ONBOARD /* Video controller is on-board */ + +#define VIDEO_HW_RECTFILL +#define VIDEO_HW_BITBLT + +#endif + +/************************************************************ + * Ident + ************************************************************/ +#define CONFIG_SC3_VERSION "r1.4" + +#define POST_OUT(x) (*((volatile unsigned char*)(0x79000080))=x) + +#endif /* __CONFIG_H */ diff --git a/include/configs/solidcard3.h b/include/configs/solidcard3.h deleted file mode 100644 index d71fcaec2aa..00000000000 --- a/include/configs/solidcard3.h +++ /dev/null @@ -1,562 +0,0 @@ -/* - * (C) Copyright 2007 - * Heiko Schocher, DENX Software Engineering, . - * - * From: - * (C) Copyright 2003 - * Juergen Beisert, EuroDesign embedded technologies, jbeisert@eurodsn.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 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * 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 __CONFIG_H -#define __CONFIG_H - -#undef USE_VGA_GRAPHICS - -/* Memory Map -0x00000000 .... 0x03FFFFFF -> RAM (up to 128MiB) -0x74000000 .... 0x740FFFFF -> CS#6 -0x74100000 .... 0x741FFFFF -> CS#7 -0x74200000 .... 0x742FFFFF -> CS4# if no internal USB -0x74300000 .... 0x743FFFFF -> CS5# if no boosted IDE -0x77C00000 .... 0x77CFFFFF -> CS4# USB HC (1 MiB) -0x77D00000 .... 0x77DFFFFF -> CS1# NAND-Flash (1 MiB) -0x78000000 .... 0x78FFFFFF -> CS2# ISA-Bus Speicherzugriff (16 MiB) -0x79000000 .... 0x7900FFFF -> CS2# ISA-Bus IO-Zugriff (16 MiB, mapped: 64kiB) -0x79010000 .... 0x79FFFFFF -> CS2# ISA-Bus IO-Zugriff (mirrored) -0x7A000000 .... 0x7A0FFFFF -> CS5# IDE emulation (1MiB) - -0x80000000 .... 0x9FFFFFFF -> PCI-Bus Speicherzugriff (512MiB, mapped: 1:1) -0xA0000000 .... 0xBFFFFFFF -> PCI-Bus Speicherzugriff (512MiB, mapped: 0x00000000...0x1FFFFFFF) -0xE8000000 .... 0xE800FFFF -> PCI-Bus IO-Zugriff (64kiB, translated to PCI: 0x0000...0xFFFF) -0xE8800000 .... 0xEBFFFFFF -> PCI-Bus IO-Zugriff (56MiB, translated to PCI: 0x00800000...0x3FFFFFF) -0xEED00000 .... 0xEED00003 -> PCI-Bus -0xEF400000 .... 0xEF40003F -> PCI-Bus Local Configuration Registers -0xEF40003F .... 0xEF5FFFFF -> reserved -0xEF600000 .... 0xEFFFFFFF -> 405GP internal Devices (10 MiB) -0xF0000000 .... 0xF01FFFFF -> Flash-ROM (2 MiB) -0xF0200000 .... 0xF7FFFFFF -> free for flash devices -0xF8000000 .... 0xF8000FFF -> OnChipMemory (4kiB) -0xF8001000 .... 0xFFDFFFFF -> free for flash devices -0xFFE00000 .... 0xFFFFFFFF -> BOOT-ROM (2 MiB) -*/ - -#define CONFIG_SOLIDCARD3 1 -#define CONFIG_4xx 1 -#define CONFIG_405GP 1 - -#define CONFIG_BOARD_EARLY_INIT_F 1 - -/* - * define IDE_USES_ISA_EMULATION for slower IDE access in the ISA-IO address range - * If undefed, IDE access uses a seperat emulation with higher access speed - * Consider to inform your Linux IDE driver about the different addresses! - * IDE_USES_ISA_EMULATION is only used if your CONFIG_COMMANDS macro includes the CFG_CMD_IDE macro! - */ -#define IDE_USES_ISA_EMULATION - -/*----------------------------------------------------------------------- - * Serial Port - *----------------------------------------------------------------------*/ -#define CONFIG_SERIAL_MULTI -#undef CONFIG_SERIAL_SOFTWARE_FIFO -/* - * define CONFIG_POWER_DOWN if your cpu should power down while waiting for your input - * Works only, if you have enabled the CONFIG_SERIAL_SOFTWARE_FIFO feature - */ -#if CONFIG_SERIAL_SOFTWARE_FIFO - #define CONFIG_POWER_DOWN -#endif - -/* - * define CONFIG_SYS_CLK_FREQ to your base crystal clock in Hz - */ -#define CONFIG_SYS_CLK_FREQ 33333333 - -/* - * define CONFIG_BAUDRATE to the baudrate value you want to use as default - */ -#define CONFIG_BAUDRATE 115200 -#define CONFIG_BOOTDELAY 3 /* autoboot after 3 seconds */ - -#define CONFIG_PREBOOT "echo;" \ - "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \ - "echo" - -#undef CONFIG_BOOTARGS - -#define CONFIG_EXTRA_ENV_SETTINGS \ - "netdev=eth0\0" \ - "nfsargs=setenv bootargs root=/dev/nfs rw " \ - "nfsroot=${serverip}:${rootpath}\0" \ - "ramargs=setenv bootargs root=/dev/ram rw\0" \ - "nand_args=setenv bootargs root=/dev/mtdblock4 rw\0" \ - "addip=setenv bootargs ${bootargs} " \ - "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}" \ - ":${hostname}:${netdev}:off panic=1\0" \ - "flash_nfs=run nfsargs addip;" \ - "bootm ${kernel_addr}\0" \ - "flash_nand=nand_args addip addcon;bootm ${kernel_addr}\0" \ - "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0" \ - "rootpath=/opt/eldk/ppc_4xx\0" \ - "bootfile=/tftpboot/sc3/uImage\0" \ - "kernel_addr=FFE08000\0" \ - "" -#undef CONFIG_BOOTCOMMAND - -#define CONFIG_SILENT_CONSOLE 1 /* enable silent startup */ -#define CFG_DEVICE_NULLDEV 1 /* include nulldev device */ - -#if 1 /* feel free to disable for development */ -#define CONFIG_AUTOBOOT_KEYED /* Enable password protection */ -#define CONFIG_AUTOBOOT_PROMPT "\nSC3 - booting... stop with S\n" -#define CONFIG_AUTOBOOT_DELAY_STR "S" /* 1st "password" */ -#endif - -/* - * define CONFIG_BOOTCOMMAND to the autoboot commands. They will running after - * the CONFIG_BOOTDELAY delay to boot your machine - */ -#define CONFIG_BOOTCOMMAND "bootp;dcache on;bootm" - -/* - * define CONFIG_BOOTARGS to the default kernel parameters. They will used if you don't - * set different values at the u-boot prompt - */ -#ifdef USE_VGA_GRAPHICS - #define CONFIG_BOOTARGS "root=/dev/nfs rw ip=bootp nfsroot=/tftpboot/solidcard3re" -#else - #define CONFIG_BOOTARGS "console=ttyS0,115200 root=/dev/nfs rw ip=bootp" -#endif -/* - * Is the USB host controller assembled? If yes define CONFIG_ISP1161_PRESENT - * This reserves memory bank #4 for this purpose - */ -#undef CONFIG_ISP1161_PRESENT - -#undef CONFIG_LOADS_ECHO /* no echo on for serial download */ -#define CFG_LOADS_BAUD_CHANGE 1 /* allow baudrate change */ - -#define CONFIG_NET_MULTI -/* #define CONFIG_EEPRO100_SROM_WRITE */ -/* #define CONFIG_SHOW_MAC */ -#define CONFIG_EEPRO100 -#define CONFIG_MII 1 /* add 405GP MII PHY management */ -#define CONFIG_PHY_ADDR 1 /* the connected Phy defaults to address 1 */ - -#define CONFIG_COMMANDS \ - (CONFIG_CMD_DFL | \ - CFG_CMD_PCI | \ - CFG_CMD_IRQ | \ - CFG_CMD_NET | \ - CFG_CMD_MII | \ - CFG_CMD_PING | \ - CFG_CMD_NAND | \ - CFG_CMD_I2C | \ - CFG_CMD_IDE | \ - CFG_CMD_DATE | \ - CFG_CMD_DHCP | \ - CFG_CMD_CACHE | \ - CFG_CMD_ELF ) - -/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ -#include - -#undef CONFIG_WATCHDOG /* watchdog disabled */ - -/* - * Miscellaneous configurable options - */ -#define CFG_LONGHELP 1 /* undef to save memory */ -#define CFG_PROMPT "SC3> " /* Monitor Command Prompt */ -#define CFG_CBSIZE 256 /* Console I/O Buffer Size */ - -#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ - -#define CFG_MAXARGS 16 /* max number of command args */ -#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ - -#define CFG_MEMTEST_START 0x0400000 /* memtest works on */ -#define CFG_MEMTEST_END 0x0C00000 /* 4 ... 12 MB in DRAM */ - -/* - * If CFG_EXT_SERIAL_CLOCK, then the UART divisor is 1. - * If CFG_405_UART_ERRATA_59, then UART divisor is 31. - * Otherwise, UART divisor is determined by CPU Clock and CFG_BASE_BAUD value. - * The Linux BASE_BAUD define should match this configuration. - * baseBaud = cpuClock/(uartDivisor*16) - * If CFG_405_UART_ERRATA_59 and 200MHz CPU clock, - * set Linux BASE_BAUD to 403200. - * - * Consider the OPB clock! If it get lower the BASE_BAUD must be lower to - * (see 405GP datasheet for descritpion) - */ -#undef CFG_EXT_SERIAL_CLOCK /* external serial clock */ -#undef CFG_405_UART_ERRATA_59 /* 405GP/CR Rev. D silicon */ -#define CFG_BASE_BAUD 921600 /* internal clock */ - -/* The following table includes the supported baudrates */ -#define CFG_BAUDRATE_TABLE \ - {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400} - -#define CFG_LOAD_ADDR 0x1000000 /* default load address */ -#define CFG_EXTBDINFO 1 /* To use extended board_into (bd_t) */ - -#define CFG_HZ 1000 /* decrementer freq: 1 ms ticks */ - -/*----------------------------------------------------------------------- - * IIC stuff - *----------------------------------------------------------------------- - */ -#define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C /* I2C bit-banged */ - -#define I2C_INIT -#define I2C_ACTIVE 0 -#define I2C_TRISTATE 0 - -#define CFG_I2C_SPEED 100000 /* use the standard 100kHz speed */ -#define CFG_I2C_SLAVE 0x7F /* mask valid bits */ - -#define CONFIG_RTC_DS1337 -#define CFG_I2C_RTC_ADDR 0x68 - -/*----------------------------------------------------------------------- - * PCI stuff - *----------------------------------------------------------------------- - */ -#define PCI_HOST_ADAPTER 0 /* configure ar pci adapter */ -#define PCI_HOST_FORCE 1 /* configure as pci host */ -#define PCI_HOST_AUTO 2 /* detected via arbiter enable */ - -#define CONFIG_PCI /* include pci support */ -#define CONFIG_PCI_HOST PCI_HOST_FORCE /* select pci host function */ -#define CONFIG_PCI_PNP /* do pci plug-and-play */ - /* resource configuration */ - -/* If you want to see, whats connected to your PCI bus */ -/* #define CONFIG_PCI_SCAN_SHOW */ - -#define CFG_PCI_SUBSYS_VENDORID 0x0000 /* PCI Vendor ID: to-do!!! */ -#define CFG_PCI_SUBSYS_DEVICEID 0x0000 /* PCI Device ID: to-do!!! */ -#define CFG_PCI_PTM1LA 0x00000000 /* point to sdram */ -#define CFG_PCI_PTM1MS 0x80000001 /* 2GB, enable hard-wired to 1 */ -#define CFG_PCI_PTM1PCI 0x00000000 /* Host: use this pci address */ -#define CFG_PCI_PTM2LA 0x00000000 /* disabled */ -#define CFG_PCI_PTM2MS 0x00000000 /* disabled */ -#define CFG_PCI_PTM2PCI 0x04000000 /* Host: use this pci address */ - -/*----------------------------------------------------------------------- - * External peripheral base address - *----------------------------------------------------------------------- - */ -#if !(CONFIG_COMMANDS & CFG_CMD_IDE) - -#undef CONFIG_IDE_LED /* no led for ide supported */ -#undef CONFIG_IDE_RESET /* no reset for ide supported */ - -/*----------------------------------------------------------------------- - * IDE/ATA stuff - *----------------------------------------------------------------------- - */ -#else /* !(CONFIG_COMMANDS & CFG_CMD_IDE) */ -#define CONFIG_START_IDE 1 /* check, if use IDE */ - -#undef CONFIG_IDE_8xx_DIRECT /* no pcmcia interface required */ -#undef CONFIG_IDE_LED /* no led for ide supported */ -#undef CONFIG_IDE_RESET /* no reset for ide supported */ - -#define CONFIG_ATAPI -#define CONFIG_DOS_PARTITION -#define CFG_IDE_MAXDEVICE (CFG_IDE_MAXBUS*1) /* max. 1 drives per IDE bus */ - -#ifndef IDE_USES_ISA_EMULATION - -/* New and faster access */ -#define CFG_ATA_BASE_ADDR 0x7A000000 /* start of ISA IO emulation */ - -/* How many IDE busses are available */ -#define CFG_IDE_MAXBUS 1 - -/* What IDE ports are available */ -#define CFG_ATA_IDE0_OFFSET 0x000 /* first is available */ -#undef CFG_ATA_IDE1_OFFSET /* second not available */ - -/* access to the data port is calculated: - CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_DATA_OFFSET + 0 */ -#define CFG_ATA_DATA_OFFSET 0x0000 /* Offset for data I/O */ - -/* access to the registers is calculated: - CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_REG_OFFSET + [1..7] */ -#define CFG_ATA_REG_OFFSET 0x0000 /* Offset for normal register accesses */ - -/* access to the alternate register is calculated: - CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_ALT_OFFSET + 6 */ -#define CFG_ATA_ALT_OFFSET 0x008 /* Offset for alternate registers */ - -#else /* IDE_USES_ISA_EMULATION */ - -#define CFG_ATA_BASE_ADDR 0x79000000 /* start of ISA IO emulation */ - -/* How many IDE busses are available */ -#define CFG_IDE_MAXBUS 1 - -/* What IDE ports are available */ -#define CFG_ATA_IDE0_OFFSET 0x01F0 /* first is available */ -#undef CFG_ATA_IDE1_OFFSET /* second not available */ - -/* access to the data port is calculated: - CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_DATA_OFFSET + 0 */ -#define CFG_ATA_DATA_OFFSET 0x0000 /* Offset for data I/O */ - -/* access to the registers is calculated: - CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_REG_OFFSET + [1..7] */ -#define CFG_ATA_REG_OFFSET 0x0000 /* Offset for normal register accesses */ - -/* access to the alternate register is calculated: - CFG_ATA_BASE_ADDR + CFG_ATA_IDE0_OFFSET + CFG_ATA_ALT_OFFSET + 6 */ -#define CFG_ATA_ALT_OFFSET 0x03F0 /* Offset for alternate registers */ - -#endif /* IDE_USES_ISA_EMULATION */ - -#endif /* !(CONFIG_COMMANDS & CFG_CMD_IDE) */ - -/* -#define CFG_KEY_REG_BASE_ADDR 0xF0100000 -#define CFG_IR_REG_BASE_ADDR 0xF0200000 -#define CFG_FPGA_REG_BASE_ADDR 0xF0300000 -*/ - -/*----------------------------------------------------------------------- - * Start addresses for the final memory configuration - * (Set up by the startup code) - * Please note that CFG_SDRAM_BASE _must_ start at 0 - * - * CFG_FLASH_BASE -> start address of internal flash - * CFG_MONITOR_BASE -> start of u-boot - */ -#ifndef __ASSEMBLER__ -extern unsigned long offsetOfBigFlash; -extern unsigned long offsetOfEnvironment; -#endif - -#define CFG_SDRAM_BASE 0x00000000 -#define CFG_FLASH_BASE 0xFFE00000 -#define CFG_MONITOR_BASE 0xFFFC0000 /* placed last 256k */ -#define CFG_MONITOR_LEN (224 * 1024) /* Reserve 224 KiB for Monitor */ -#define CFG_MALLOC_LEN (128 * 1024) /* Reserve 128 KiB for malloc() */ - -/* - * For booting Linux, the board info and command line data - * have to be in the first 8 MiB of memory, since this is - * the maximum mapped by the Linux kernel during initialization. - */ -#define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */ -/*----------------------------------------------------------------------- - * FLASH organization ## FIXME: lookup in datasheet - */ -#define CFG_MAX_FLASH_BANKS 2 /* max number of memory banks */ -#define CFG_MAX_FLASH_SECT 256 /* max number of sectors on one chip */ - -#define CFG_FLASH_CFI /* flash is CFI compat. */ -#define CFG_FLASH_CFI_DRIVER /* Use common CFI driver*/ -#define CFG_FLASH_EMPTY_INFO /* print 'E' for empty sector */ -#define CFG_FLASH_QUIET_TEST 1 /* don't warn upon unknown flash*/ -#define CFG_FLASH_ERASE_TOUT 120000 /* Timeout for Flash Erase (in ms) */ -#define CFG_FLASH_WRITE_TOUT 500 /* Timeout for Flash Write (in ms) */ - -#define CFG_ENV_IS_IN_FLASH 1 -#if CFG_ENV_IS_IN_FLASH - #define CFG_ENV_OFFSET 0x00000000 /* Offset of Environment Sector in bottom type */ - #define CFG_ENV_SIZE 0x4000 /* Total Size of Environment Sector */ - #define CFG_ENV_SECT_SIZE 0x4000 /* see README - env sector total size */ -#endif -/* let us changing anything in our environment */ -#define CONFIG_ENV_OVERWRITE - -/* - * NAND-FLASH stuff - */ -#define CFG_MAX_NAND_DEVICE 1 -#define NAND_MAX_CHIPS 1 -#define CFG_NAND_BASE 0x77D00000 - -/*----------------------------------------------------------------------- - * Cache Configuration - * - * CFG_DCACHE_SIZE -> size of data cache: - * - 405GP 8k - * - 405GPr 16k - * How to handle the difference in chache size? - * CFG_CACHELINE_SIZE -> size of one cache line: 32 bytes - * (used in cpu/ppc4xx/start.S) -*/ -#define CFG_DCACHE_SIZE 16384 - -#define CFG_CACHELINE_SIZE 32 - -#if (CONFIG_COMMANDS & CFG_CMD_KGDB) - #define CFG_CACHELINE_SHIFT 5 /* log base 2 of the above value */ -#endif - -/* - * Init Memory Controller: - * - */ - -#define FLASH_BASE0_PRELIM CFG_FLASH_BASE -#define FLASH_BASE1_PRELIM 0 - -/*----------------------------------------------------------------------- - * Some informations about the internal SRAM (OCM=On Chip Memory) - * - * CFG_OCM_DATA_ADDR -> location - * CFG_OCM_DATA_SIZE -> size -*/ - -#define CFG_TEMP_STACK_OCM 1 -#define CFG_OCM_DATA_ADDR 0xF8000000 -#define CFG_OCM_DATA_SIZE 0x1000 - -/*----------------------------------------------------------------------- - * Definitions for initial stack pointer and data area (in DPRAM): - * - we are using the internal 4k SRAM, so we don't need data cache mapping - * - internal SRAM (OCM=On Chip Memory) is placed to CFG_OCM_DATA_ADDR - * - Stackpointer will be located to - * (CFG_INIT_RAM_ADDR&0xFFFF0000) | (CFG_INIT_SP_OFFSET&0x0000FFFF) - * in cpu/ppc4xx/start.S - */ - -#undef CFG_INIT_DCACHE_CS -/* Where the internal SRAM starts */ -#define CFG_INIT_RAM_ADDR CFG_OCM_DATA_ADDR -/* Where the internal SRAM ends (only offset) */ -#define CFG_INIT_RAM_END 0x0F00 - -/* - - CFG_INIT_RAM_ADDR ------> ------------ lower address - | | - | ^ | - | | | - | | Stack | - CFG_GBL_DATA_OFFSET ----> ------------ - | | - | 64 Bytes | - | | - CFG_INIT_RAM_END ------> ------------ higher address - (offset only) - -*/ -/* size in bytes reserved for initial data */ -#define CFG_GBL_DATA_SIZE 64 -#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) -/* Initial value of the stack pointern in internal SRAM */ -#define CFG_INIT_SP_OFFSET CFG_GBL_DATA_OFFSET - -/* - * Internal Definitions - * - * Boot Flags - */ -#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */ -#define BOOTFLAG_WARM 0x02 /* Software reboot */ - -/* ################################################################################### */ -/* These defines will be used in cpu/ppc4xx/cpu_init.c to setup external chip selects */ -/* They are currently undefined cause they are initiaized in board/solidcard3/init.S */ - -/* This chip select accesses the boot device */ -/* It depends on boot select switch if this device is 16 or 8 bit */ - -#undef CFG_EBC_PB0AP -#undef CFG_EBC_PB0CR - -#undef CFG_EBC_PB1AP -#undef CFG_EBC_PB1CR - -#undef CFG_EBC_PB2AP -#undef CFG_EBC_PB2CR - -#undef CFG_EBC_PB3AP -#undef CFG_EBC_PB3CR - -#undef CFG_EBC_PB4AP -#undef CFG_EBC_PB4CR - -#undef CFG_EBC_PB5AP -#undef CFG_EBC_PB5CR - -#undef CFG_EBC_PB6AP -#undef CFG_EBC_PB6CR - -#undef CFG_EBC_PB7AP -#undef CFG_EBC_PB7CR - -#define CONFIG_SDRAM_BANK0 /* use the standard SDRAM initialization */ -#undef CONFIG_SPD_EEPROM - -/* - * Define this to get more information about system configuration - */ -/* #define SC3_DEBUGOUT */ -#undef SC3_DEBUGOUT - -/*********************************************************************** - * External peripheral base address - ***********************************************************************/ - -#define CFG_ISA_MEM_BASE_ADDRESS 0x78000000 -/* - Die Grafik-Treiber greifen über die Adresse in diesem Macro auf den Chip zu. - Das funktioniert bei deren Karten, weil sie eine PCI-Bridge benutzen, die - das gleiche Mapping durchführen kann, wie der SC520 (also Aufteilen von IO-Zugriffen - auf ISA- und PCI-Zyklen) - */ -#define CFG_ISA_IO_BASE_ADDRESS 0xE8000000 -/*#define CFG_ISA_IO_BASE_ADDRESS 0x79000000 */ - -/************************************************************ - * Video support - ************************************************************/ - -#ifdef USE_VGA_GRAPHICS -#define CONFIG_VIDEO /* To enable video controller support */ -#define CONFIG_VIDEO_CT69000 -#define CONFIG_CFB_CONSOLE -/* #define CONFIG_VIDEO_LOGO */ -#define CONFIG_VGA_AS_SINGLE_DEVICE -#define CONFIG_VIDEO_SW_CURSOR -/* #define CONFIG_VIDEO_HW_CURSOR */ -#define CONFIG_VIDEO_ONBOARD /* Video controller is on-board */ - -#define VIDEO_HW_RECTFILL -#define VIDEO_HW_BITBLT - -#endif - -/************************************************************ - * Ident - ************************************************************/ -#define CONFIG_SC3_VERSION "r1.4" - -#define POST_OUT(x) (*((volatile unsigned char*)(0x79000080))=x) - -#endif /* __CONFIG_H */ -- cgit v1.3.1 From cb4820725e9fc409c5cbc8e83054a6ed522d2111 Mon Sep 17 00:00:00 2001 From: Heiko Schocher Date: Thu, 18 Jan 2007 11:28:51 +0100 Subject: [PATCH] Fix: Compilerwarnings for SC3 board. The EBC Configuration Register is now by CFG_EBC_CFG definable Added JFFS2 support for the SC3 board. Signed-off-by: Heiko Schocher --- board/sc3/sc3.c | 2 ++ cpu/ppc4xx/405gp_pci.c | 4 +--- cpu/ppc4xx/cpu_init.c | 5 ++--- drivers/cfi_flash.c | 6 +++--- include/configs/sc3.h | 39 ++++++++++++++++++++++++++------------- 5 files changed, 34 insertions(+), 22 deletions(-) (limited to 'include') diff --git a/board/sc3/sc3.c b/board/sc3/sc3.c index d94896ecd00..363a77d8a4e 100644 --- a/board/sc3/sc3.c +++ b/board/sc3/sc3.c @@ -354,6 +354,8 @@ int board_early_init_f (void) initUsbHost (&cpldConfig_1); writeb (cpldConfig_1, CPLD_CONTROL_1); #endif + /* FIXME: for what must we do this */ + *(unsigned long *)0x79000080 = 0x0001; return(0); } diff --git a/cpu/ppc4xx/405gp_pci.c b/cpu/ppc4xx/405gp_pci.c index 38a1305d7f2..7134355635e 100644 --- a/cpu/ppc4xx/405gp_pci.c +++ b/cpu/ppc4xx/405gp_pci.c @@ -380,7 +380,7 @@ void pci_405gp_setup_vga(struct pci_controller *hose, pci_dev_t dev, pci_hose_write_config_dword(hose, dev, PCI_COMMAND, cmdstat); } -#if !(defined(CONFIG_PIP405) || defined (CONFIG_MIP405)) || defined (CONFIG_SOLIDCARD3) +#if !(defined(CONFIG_PIP405) || defined (CONFIG_MIP405)) && !(defined (CONFIG_SOLIDCARD3)) /* *As is these functs get called out of flash Not a horrible @@ -406,7 +406,6 @@ static struct pci_controller hose = { config_table: pci_405gp_config_table, }; -#ifndef CONFIG_SOLIDCARD3 void pci_init_board(void) { /*we want the ptrs to RAM not flash (ie don't use init list)*/ @@ -414,7 +413,6 @@ void pci_init_board(void) hose.config_table = pci_405gp_config_table; pci_405gp_init(&hose); } -#endif #endif diff --git a/cpu/ppc4xx/cpu_init.c b/cpu/ppc4xx/cpu_init.c index e2aa867c941..ae245910872 100644 --- a/cpu/ppc4xx/cpu_init.c +++ b/cpu/ppc4xx/cpu_init.c @@ -313,9 +313,8 @@ cpu_init_f (void) mtebc(pb7cr, CFG_EBC_PB7CR); #endif -#if defined (CONFIG_SOLIDCARD3) - mtebc(epcr, 0xb84ef000); - *(unsigned long *)0x79000080 = 0x0001; +#if defined (CFG_EBC_CFG) + mtebc(epcr, CFG_EBC_CFG); #endif #if defined(CONFIG_WATCHDOG) diff --git a/drivers/cfi_flash.c b/drivers/cfi_flash.c index 8dc44997b8e..665d8e7649c 100644 --- a/drivers/cfi_flash.c +++ b/drivers/cfi_flash.c @@ -860,7 +860,7 @@ static int flash_full_status_check (flash_info_t * info, flash_sect_t sector, */ static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c) { -#if defined(__LITTLE_ENDIAN) +#if defined(__LITTLE_ENDIAN) && !defined(CONFIG_SOLIDCARD3) unsigned short w; unsigned int l; unsigned long long ll; @@ -880,7 +880,7 @@ static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c) #endif break; case FLASH_CFI_32BIT: -#if defined(__LITTLE_ENDIAN) +#if defined(__LITTLE_ENDIAN) && !defined(CONFIG_SOLIDCARD3) l = c; l <<= 24; cword->l = (cword->l >> 8) | l; @@ -889,7 +889,7 @@ static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c) #endif break; case FLASH_CFI_64BIT: -#if defined(__LITTLE_ENDIAN) +#if defined(__LITTLE_ENDIAN) && !defined(CONFIG_SOLIDCARD3) ll = c; ll <<= 56; cword->ll = (cword->ll >> 8) | ll; diff --git a/include/configs/sc3.h b/include/configs/sc3.h index 2d0278290a2..a4a16054601 100644 --- a/include/configs/sc3.h +++ b/include/configs/sc3.h @@ -108,7 +108,8 @@ "nfsargs=setenv bootargs root=/dev/nfs rw " \ "nfsroot=${serverip}:${rootpath}\0" \ "ramargs=setenv bootargs root=/dev/ram rw\0" \ - "nand_args=setenv bootargs root=/dev/mtdblock4 rw\0" \ + "nand_args=setenv bootargs root=/dev/mtdblock5 rw" \ + "rootfstype=jffs2\0" \ "addip=setenv bootargs ${bootargs} " \ "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}" \ ":${hostname}:${netdev}:off panic=1\0" \ @@ -164,18 +165,19 @@ #define CONFIG_COMMANDS \ (CONFIG_CMD_DFL | \ - CFG_CMD_PCI | \ - CFG_CMD_IRQ | \ - CFG_CMD_NET | \ - CFG_CMD_MII | \ - CFG_CMD_PING | \ - CFG_CMD_NAND | \ - CFG_CMD_I2C | \ - CFG_CMD_IDE | \ - CFG_CMD_DATE | \ - CFG_CMD_DHCP | \ - CFG_CMD_CACHE | \ - CFG_CMD_ELF ) + CFG_CMD_PCI | \ + CFG_CMD_IRQ | \ + CFG_CMD_NET | \ + CFG_CMD_MII | \ + CFG_CMD_PING | \ + CFG_CMD_NAND | \ + CFG_CMD_JFFS2 | \ + CFG_CMD_I2C | \ + CFG_CMD_IDE | \ + CFG_CMD_DATE | \ + CFG_CMD_DHCP | \ + CFG_CMD_CACHE | \ + CFG_CMD_ELF ) /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ #include @@ -404,6 +406,15 @@ extern unsigned long offsetOfEnvironment; #define NAND_MAX_CHIPS 1 #define CFG_NAND_BASE 0x77D00000 + +#define CONFIG_JFFS2_NAND 1 /* jffs2 on nand support */ + +/* No command line, one static partition Partition 3 contains jffs2 rootfs */ +#undef CONFIG_JFFS2_CMDLINE +#define CONFIG_JFFS2_DEV "nand0" +#define CONFIG_JFFS2_PART_SIZE 0x00400000 +#define CONFIG_JFFS2_PART_OFFSET 0x00c00000 + /*----------------------------------------------------------------------- * Cache Configuration * @@ -516,6 +527,8 @@ extern unsigned long offsetOfEnvironment; #undef CFG_EBC_PB7AP #undef CFG_EBC_PB7CR +#define CFG_EBC_CFG 0xb84ef000 + #define CONFIG_SDRAM_BANK0 /* use the standard SDRAM initialization */ #undef CONFIG_SPD_EEPROM -- cgit v1.3.1 From 34167a36c29ee946b727465db5c014746a08e978 Mon Sep 17 00:00:00 2001 From: Stefan Roese Date: Thu, 18 Jan 2007 11:48:10 +0100 Subject: [PATCH] Add missing Taishan config file Signed-off-by: Stefan Roese --- include/configs/taishan.h | 333 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 333 insertions(+) create mode 100644 include/configs/taishan.h (limited to 'include') diff --git a/include/configs/taishan.h b/include/configs/taishan.h new file mode 100644 index 00000000000..7ace3971d74 --- /dev/null +++ b/include/configs/taishan.h @@ -0,0 +1,333 @@ +/* + * (C) Copyright 2007 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * 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 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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 + */ + +/************************************************************************ + * TAISHAN.h - configuration for AMCC 440GX Ref + ***********************************************************************/ + +#ifndef __CONFIG_H +#define __CONFIG_H + +/*----------------------------------------------------------------------- + * High Level Configuration Options + *----------------------------------------------------------------------*/ +#define CONFIG_TAISHAN 1 /* Board is taishan */ +#define CONFIG_440GX 1 /* Specifc GX support */ +#define CONFIG_4xx 1 /* ... PPC4xx family */ +#undef CFG_DRAM_TEST /* Disable-takes long time! */ +#define CONFIG_SYS_CLK_FREQ 33333333 /* external freq to pll */ + +#define CONFIG_BOARD_EARLY_INIT_F 1 /* Call board_pre_init */ +#define CONFIG_MISC_INIT_R 1 /* Call misc_init_r */ + +/*----------------------------------------------------------------------- + * Base addresses -- Note these are effective addresses where the + * actual resources get mapped (not physical addresses) + *----------------------------------------------------------------------*/ +#define CFG_SDRAM_BASE 0x00000000 /* _must_ be 0 */ +#define CFG_FLASH_BASE 0xfc000000 /* start of FLASH */ +#define CFG_MONITOR_BASE 0xfffc0000 /* start of monitor */ +#define CFG_PCI_MEMBASE 0x80000000 /* mapped pci memory */ +#define CFG_PERIPHERAL_BASE 0xe0000000 /* internal peripherals */ +#define CFG_ISRAM_BASE 0xc0000000 /* internal SRAM */ +#define CFG_PCI_BASE 0xd0000000 /* internal PCI regs */ + +#define CFG_EBC0_FLASH_BASE CFG_FLASH_BASE +#define CFG_EBC1_FPGA_BASE (CFG_PERIPHERAL_BASE + 0x01000000) +#define CFG_EBC2_LCM_BASE (CFG_PERIPHERAL_BASE + 0x02000000) +#define CFG_EBC3_CONN_BASE (CFG_PERIPHERAL_BASE + 0x08000000) + +#define CFG_GPIO_BASE (CFG_PERIPHERAL_BASE + 0x00000700) + +/*----------------------------------------------------------------------- + * Initial RAM & stack pointer (placed in internal SRAM) + *----------------------------------------------------------------------*/ +#define CFG_TEMP_STACK_OCM 1 +#define CFG_OCM_DATA_ADDR CFG_ISRAM_BASE +#define CFG_INIT_RAM_ADDR CFG_ISRAM_BASE /* Initial RAM address */ +#define CFG_INIT_RAM_END 0x2000 /* End of used area in RAM*/ +#define CFG_GBL_DATA_SIZE 128 /* num bytes initial data*/ + +#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) +#define CFG_POST_WORD_ADDR (CFG_GBL_DATA_OFFSET - 0x4) +#define CFG_INIT_SP_OFFSET CFG_POST_WORD_ADDR + +#define CFG_MONITOR_LEN (256 * 1024) /* Reserve 256 kB for Mon*/ +#define CFG_MALLOC_LEN (1024 * 1024) /* Reserve 1024 kB for malloc*/ + +/*----------------------------------------------------------------------- + * Serial Port + *----------------------------------------------------------------------*/ +#define CONFIG_UART1_CONSOLE 1 /* use of UART1 as console */ +#define CONFIG_SERIAL_MULTI 1 /* enable serial multi support */ +#define CFG_EXT_SERIAL_CLOCK (1843200 * 6) /* Ext clk @ 11.059 MHz */ +#define CONFIG_BAUDRATE 115200 + +#define CFG_BAUDRATE_TABLE \ + {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200} + +/*----------------------------------------------------------------------- + * Environment + *----------------------------------------------------------------------*/ +#define CFG_ENV_IS_IN_FLASH 1 /* use FLASH for environment vars */ + +/*----------------------------------------------------------------------- + * FLASH related + *----------------------------------------------------------------------*/ +#define CFG_FLASH_CFI +#define CFG_FLASH_CFI_DRIVER +#define CFG_FLASH_EMPTY_INFO /* print 'E' for empty sector on flinfo */ +#define CFG_FLASH_USE_BUFFER_WRITE 1 /* use buffered writes (20x faster) */ + +#define CFG_FLASH_BANKS_LIST {CFG_FLASH_BASE} +#define CFG_MAX_FLASH_BANKS 1 /* number of banks */ +#define CFG_MAX_FLASH_SECT 1024 /* sectors per device */ + +#undef CFG_FLASH_CHECKSUM +#define CFG_FLASH_ERASE_TOUT 120000 /* Timeout for Flash Erase (in ms) */ +#define CFG_FLASH_WRITE_TOUT 500 /* Timeout for Flash Write (in ms) */ + +#define CFG_ENV_SECT_SIZE 0x40000 /* size of one complete sector */ +#define CFG_ENV_ADDR (CFG_MONITOR_BASE-CFG_ENV_SECT_SIZE) +#define CFG_ENV_SIZE 0x4000 /* Total Size of Environment Sector */ + +/* Address and size of Redundant Environment Sector */ +#define CFG_ENV_ADDR_REDUND (CFG_ENV_ADDR-CFG_ENV_SECT_SIZE) +#define CFG_ENV_SIZE_REDUND (CFG_ENV_SIZE) + +/*----------------------------------------------------------------------- + * E2PROM bootstrap configure value + *----------------------------------------------------------------------*/ + +/* + * 800/133/66 + * IIC 0~15: 86 78 11 6a 61 A7 04 62 00 00 00 00 00 00 00 00 + */ + +/* + * 800/160/80 + * IIC 0~15: 86 78 c1 a6 09 67 04 63 00 00 00 00 00 00 00 00 + */ + +/*----------------------------------------------------------------------- + * DDR SDRAM + *----------------------------------------------------------------------*/ +#undef CONFIG_SPD_EEPROM /* Don't use SPD EEPROM for setup */ +#define CONFIG_SDRAM_BANK0 1 /* init onboard DDR SDRAM bank 0 */ +#define CFG_SDRAM0_TR0 0xC10A401A +#undef CONFIG_SDRAM_ECC /* enable ECC support */ + +/*----------------------------------------------------------------------- + * I2C + *----------------------------------------------------------------------*/ +#define CONFIG_HARD_I2C 1 /* I2C with hardware support */ +#undef CONFIG_SOFT_I2C /* I2C bit-banged */ +#define CFG_I2C_SPEED 400000 /* I2C speed and slave address */ +#define CFG_I2C_SLAVE 0x7F + +#undef CFG_I2C_MULTI_EEPROMS +#define CFG_I2C_EEPROM_ADDR 0x50 +#define CFG_I2C_EEPROM_ADDR_LEN 1 +#define CFG_EEPROM_PAGE_WRITE_ENABLE +#define CFG_EEPROM_PAGE_WRITE_BITS 3 +#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10 + +#define CFG_BOOTSTRAP_IIC_ADDR 0x50 + +/* I2C SYSMON (LM75, AD7414 is almost compatible) */ +#define CONFIG_DTT_LM75 1 /* ON Semi's LM75 */ +#define CONFIG_DTT_SENSORS {0} /* Sensor addresses */ +#define CFG_DTT_MAX_TEMP 70 +#define CFG_DTT_LOW_TEMP -30 +#define CFG_DTT_HYSTERESIS 3 + +/*----------------------------------------------------------------------- + * Environment + *----------------------------------------------------------------------*/ + +#define CONFIG_PREBOOT "echo;" \ + "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \ + "echo" + +#undef CONFIG_BOOTARGS + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "netdev=eth0\0" \ + "hostname=taishan\0" \ + "nfsargs=setenv bootargs root=/dev/nfs rw " \ + "nfsroot=${serverip}:${rootpath}\0" \ + "ramargs=setenv bootargs root=/dev/ram rw\0" \ + "addip=setenv bootargs ${bootargs} " \ + "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}" \ + ":${hostname}:${netdev}:off panic=1\0" \ + "addtty=setenv bootargs ${bootargs} console=ttyS1,${baudrate}\0"\ + "flash_nfs=run nfsargs addip addtty;" \ + "bootm ${kernel_addr}\0" \ + "flash_self=run ramargs addip addtty;" \ + "bootm ${kernel_addr} ${ramdisk_addr}\0" \ + "net_nfs=tftp 200000 ${bootfile};run nfsargs addip addtty;" \ + "bootm\0" \ + "rootpath=/opt/eldk/ppc_4xx\0" \ + "bootfile=/tftpboot/taishan/uImage\0" \ + "kernel_addr=fc000000\0" \ + "ramdisk_addr=fc180000\0" \ + "load=tftp 100000 /tftpboot/taishan/u-boot.bin\0" \ + "update=protect off fffc0000 ffffffff;era fffc0000 ffffffff;" \ + "cp.b 100000 fffc0000 40000;" \ + "setenv filesize;saveenv\0" \ + "upd=run load;run update\0" \ + "fixedip=setenv bootargs $(bootargs) ip=$(ipaddr):$(serverip):" \ + "$(gatewayip):$(netmask):$(hostname):$(netdev):off panic=1\0" \ + "dhcp=setenv bootargs $(bootargs) ip=dhcp\0" \ + "kozio=bootm 0xffe00000\0" \ + "" +#define CONFIG_BOOTCOMMAND "run flash_self" + +#if 0 +#define CONFIG_BOOTDELAY -1 /* autoboot disabled */ +#else +#define CONFIG_BOOTDELAY 5 /* autoboot after 5 seconds */ +#endif + +#define CONFIG_BAUDRATE 115200 +#define CONFIG_LOADS_ECHO 1 /* echo on for serial download */ +#define CFG_LOADS_BAUD_CHANGE 1 /* allow baudrate change */ + +/*----------------------------------------------------------------------- + * Networking + *----------------------------------------------------------------------*/ +#define CONFIG_EMAC_NR_START 2 /* start with EMAC 2 (skip 0&1) */ +#define CONFIG_MII 1 /* MII PHY management */ +#define CONFIG_NET_MULTI 1 +#define CONFIG_PHY_ADDR 0xff /* no phy on EMAC0 */ +#define CONFIG_PHY1_ADDR 0xff /* no phy on EMAC1 */ +#define CONFIG_PHY2_ADDR 0x1 +#define CONFIG_PHY3_ADDR 0x3 +#define CONFIG_ET1011C_PHY 1 +#define CONFIG_HAS_ETH0 +#define CONFIG_HAS_ETH1 +#define CONFIG_HAS_ETH2 +#define CONFIG_HAS_ETH3 +#define CONFIG_PHY_GIGE 1 /* Include GbE speed/duplex detection */ +#define CONFIG_PHY_RESET 1 /* reset phy upon startup */ +#define CONFIG_PHY_RESET_DELAY 1000 +#define CFG_RX_ETH_BUFFER 32 /* Number of ethernet rx buffers & descriptors */ + +#define CONFIG_NETCONSOLE /* include NetConsole support */ + +/*----------------------------------------------------------------------- + * Console/Commands/Parser + *----------------------------------------------------------------------*/ +#define CONFIG_COMMANDS (CONFIG_CMD_DFL | \ + CFG_CMD_ASKENV | \ + CFG_CMD_DHCP | \ + CFG_CMD_DIAG | \ + CFG_CMD_DTT | \ + CFG_CMD_ELF | \ + CFG_CMD_EEPROM | \ + CFG_CMD_I2C | \ + CFG_CMD_IRQ | \ + CFG_CMD_MII | \ + CFG_CMD_NET | \ + CFG_CMD_NFS | \ + CFG_CMD_PCI | \ + CFG_CMD_PING | \ + CFG_CMD_REGINFO) + +/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ +#include + +#undef CONFIG_WATCHDOG /* watchdog disabled */ + +/*----------------------------------------------------------------------- + * Miscellaneous configurable options + *----------------------------------------------------------------------*/ +#define CFG_LONGHELP /* undef to save memory */ +#define CFG_PROMPT "=> " /* Monitor Command Prompt */ +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CFG_CBSIZE 1024 /* Console I/O Buffer Size */ +#else +#define CFG_CBSIZE 256 /* Console I/O Buffer Size */ +#endif +#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ +#define CFG_MAXARGS 16 /* max number of command args */ +#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ + +#define CFG_MEMTEST_START 0x0400000 /* memtest works on */ +#define CFG_MEMTEST_END 0x0C00000 /* 4 ... 12 MB in DRAM */ + +#define CFG_LOAD_ADDR 0x100000 /* default load address */ +#define CFG_EXTBDINFO 1 /* To use extended board_into (bd_t) */ + +#define CFG_HZ 1000 /* decrementer freq: 1 ms ticks */ + +#define CONFIG_CMDLINE_EDITING 1 /* add command line history */ +#define CONFIG_LOOPW 1 /* enable loopw command */ +#define CONFIG_MX_CYCLIC 1 /* enable mdc/mwc commands */ +#define CONFIG_ZERO_BOOTDELAY_CHECK /* check for keypress on bootdelay==0 */ +#define CONFIG_VERSION_VARIABLE 1 /* include version env variable */ + +/*----------------------------------------------------------------------- + * PCI stuff + *----------------------------------------------------------------------- + */ +/* General PCI */ +#define CONFIG_PCI /* include pci support */ +#define CONFIG_PCI_PNP /* do pci plug-and-play */ +#define CONFIG_EEPRO100 1 /* include PCI EEPRO100 */ +#define CONFIG_PCI_SCAN_SHOW /* show pci devices on startup */ +#define CFG_PCI_TARGBASE 0x80000000 /* PCIaddr mapped to CFG_PCI_MEMBASE */ + +/* Board-specific PCI */ +#define CFG_PCI_PRE_INIT /* enable board pci_pre_init() */ +#define CFG_PCI_TARGET_INIT /* let board init pci target */ + +#define CFG_PCI_SUBSYS_VENDORID 0x10e8 /* AMCC */ +#define CFG_PCI_SUBSYS_DEVICEID 0xcafe /* Whatever */ + +/* + * For booting Linux, the board info and command line data + * have to be in the first 8 MB of memory, since this is + * the maximum mapped by the Linux kernel during initialization. + */ +#define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */ + +/*----------------------------------------------------------------------- + * Cache Configuration + *----------------------------------------------------------------------*/ +#define CFG_DCACHE_SIZE 32768 /* For AMCC 440 CPUs */ +#define CFG_CACHELINE_SIZE 32 /* ... */ +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CFG_CACHELINE_SHIFT 5 /* log base 2 of the above value */ +#endif + +/* + * Internal Definitions + * + * Boot Flags + */ +#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */ +#define BOOTFLAG_WARM 0x02 /* Software reboot */ + +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CONFIG_KGDB_BAUDRATE 230400 /* speed to run kgdb serial port */ +#define CONFIG_KGDB_SER_INDEX 2 /* which serial port to use */ +#endif +#endif /* __CONFIG_H */ -- cgit v1.3.1 From 0057d758e3e874cbe7f24745d0cce8c1cb6c207e Mon Sep 17 00:00:00 2001 From: Stefan Roese Date: Thu, 18 Jan 2007 11:54:52 +0100 Subject: [PATCH] Update Prodrive P3Mx support Signed-off-by: Stefan Roese --- board/prodrive/p3mx/p3mx.c | 63 +++++++++++++++++++++++++++++++++++++--- board/prodrive/p3mx/sdram_init.c | 4 +-- include/configs/p3mx.h | 5 ++-- 3 files changed, 64 insertions(+), 8 deletions(-) (limited to 'include') diff --git a/board/prodrive/p3mx/p3mx.c b/board/prodrive/p3mx/p3mx.c index 6cebd1aeb6d..d54ddaffc1e 100644 --- a/board/prodrive/p3mx/p3mx.c +++ b/board/prodrive/p3mx/p3mx.c @@ -45,6 +45,7 @@ #include "mpsc.h" #include "64460.h" #include "mv_regs.h" +#include "p3mx.h" DECLARE_GLOBAL_DATA_PTR; @@ -79,6 +80,7 @@ extern flash_info_t flash_info[]; void board_prebootm_init (void); unsigned int INTERNAL_REG_BASE_ADDR = CFG_GT_REGS; int display_mem_map (void); +void set_led(int); /* ------------------------------------------------------------------------- */ @@ -246,7 +248,6 @@ int board_early_init_f (void) * that if it's not at the power-on location, it's where we put * it last time. (huber) */ - my_remap_gt_regs (CFG_DFL_GT_REGS, CFG_GT_REGS); #ifdef CONFIG_PCI @@ -287,6 +288,8 @@ int board_early_init_f (void) GT_REG_WRITE (GPP_LEVEL_CONTROL, CFG_GPP_LEVEL_CONTROL); + set_led(LED_RED); + return 0; } @@ -332,6 +335,7 @@ void after_reloc (ulong dest_addr, gd_t * gd) /* display_mem_map(); */ /* now, jump to the main U-Boot board init code */ + set_led(LED_GREEN); board_init_r (gd, dest_addr); /* NOTREACHED */ } @@ -356,15 +360,66 @@ int checkboard (void) return (0); } -/* utility functions */ -void debug_led (int led, int mode) +void set_led(int col) { + int tmp; + int on_pin; + int off_pin; + + /* Program Mpp[22] as Gpp[22] + * Program Mpp[23] as Gpp[23] + */ + tmp = GTREGREAD(MPP_CONTROL2); + tmp &= 0x00ffffff; + GT_REG_WRITE(MPP_CONTROL2,tmp); + + /* Program Gpp[22] and Gpp[23] as output + */ + tmp = GTREGREAD(GPP_IO_CONTROL); + tmp |= 0x00C00000; + GT_REG_WRITE(GPP_IO_CONTROL, tmp); + + /* Program Gpp[22] and Gpp[23] as active high + */ + tmp = GTREGREAD(GPP_LEVEL_CONTROL); + tmp &= 0xff3fffff; + GT_REG_WRITE(GPP_LEVEL_CONTROL, tmp); + + switch(col) { + default: + case LED_OFF : + on_pin = 0; + off_pin = ((1 << 23) | (1 << 22)); + break; + case LED_RED : + on_pin = (1 << 23); + off_pin = (1 << 22); + break; + case LED_GREEN : + on_pin = (1 << 22); + off_pin = (1 << 23); + break; + case LED_ORANGE : + on_pin = ((1 << 23) | (1 << 22)); + off_pin = 0; + break; + } + + /* Set output Gpp[22] and Gpp[23] + */ + tmp = GTREGREAD(GPP_VALUE); + tmp |= on_pin; + tmp &= ~off_pin; + GT_REG_WRITE(GPP_VALUE, tmp); } int display_mem_map (void) { - int i, j; + int i; unsigned int base, size, width; +#ifdef CONFIG_PCI + int j; +#endif /* SDRAM */ printf ("SD (DDR) RAM\n"); diff --git a/board/prodrive/p3mx/sdram_init.c b/board/prodrive/p3mx/sdram_init.c index 176252efee5..0464860424e 100644 --- a/board/prodrive/p3mx/sdram_init.c +++ b/board/prodrive/p3mx/sdram_init.c @@ -65,7 +65,7 @@ int mvDmaTransfer (int, ulong, ulong, ulong, ulong); int memory_map_bank (unsigned int bankNo, unsigned int bankBase, unsigned int bankLength) { -#ifdef MAP_PCI +#if defined (MAP_PCI) && defined (CONFIG_PCI) PCI_HOST host; #endif @@ -80,7 +80,7 @@ int memory_map_bank (unsigned int bankNo, memoryMapBank (bankNo, bankBase, bankLength); -#ifdef MAP_PCI +#if defined (MAP_PCI) && defined (CONFIG_PCI) for (host = PCI_HOST0; host <= PCI_HOST1; host++) { const int features = PREFETCH_ENABLE | diff --git a/include/configs/p3mx.h b/include/configs/p3mx.h index 262e9d6acfc..54462f007cd 100644 --- a/include/configs/p3mx.h +++ b/include/configs/p3mx.h @@ -168,10 +168,12 @@ #define PCI_HOST_FORCE 1 /* configure as pci host */ #define PCI_HOST_AUTO 2 /* detected via arbiter enable */ -#define CONFIG_PCI /* include pci support */ +#undef CONFIG_PCI /* include pci support */ +#ifdef CONFIG_PCI #define CONFIG_PCI_HOST PCI_HOST_FORCE /* select pci host function */ #define CONFIG_PCI_PNP /* do pci plug-and-play */ #define CONFIG_PCI_SCAN_SHOW /* show devices on bus */ +#endif /* CONFIG_PCI */ /* PCI MEMORY MAP section */ #define CFG_PCI0_MEM_BASE 0x80000000 @@ -194,7 +196,6 @@ #define CFG_PCI1_IO_SPACE_PCI 0x00000000 #define CFG_ISA_IO_BASE_ADDRESS (CFG_PCI0_IO_BASE) - #define CFG_PCI_IDSEL 0x30 #undef CONFIG_BOOTARGS -- cgit v1.3.1 From 9d8d5a5bfb64768f29a0cb47fc37cd6f4c40e276 Mon Sep 17 00:00:00 2001 From: Stefan Roese Date: Thu, 18 Jan 2007 16:05:47 +0100 Subject: [PATCH] Add support for Prodrive SCPU (PDNB3 variant) board Signed-off-by: Stefan Roese --- MAINTAINERS | 1 + MAKEALL | 2 +- Makefile | 11 +++++++++-- board/prodrive/pdnb3/flash.c | 4 ++++ include/configs/pdnb3.h | 37 +++++++++++++++++++++++++++++++++++-- 5 files changed, 50 insertions(+), 5 deletions(-) (limited to 'include') diff --git a/MAINTAINERS b/MAINTAINERS index 81c113d7b1a..e9203eb05f3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -465,6 +465,7 @@ Stefan Roese ixdpg425 xscale pdnb3 xscale + scpu xscale Robert Schwebel diff --git a/MAKEALL b/MAKEALL index b3e16bc6c5b..40a5c773e59 100755 --- a/MAKEALL +++ b/MAKEALL @@ -225,7 +225,7 @@ LIST_pxa=" \ xsengine zylonite \ " -LIST_ixp="ixdp425 ixdpg425 pdnb3" +LIST_ixp="ixdp425 ixdpg425 pdnb3 scpu" LIST_arm=" \ diff --git a/Makefile b/Makefile index af3300688f7..b1952edfe7f 100644 --- a/Makefile +++ b/Makefile @@ -2066,8 +2066,15 @@ pleb2_config : unconfig logodl_config : unconfig @$(MKCONFIG) $(@:_config=) arm pxa logodl -pdnb3_config : unconfig - @$(MKCONFIG) $(@:_config=) arm ixp pdnb3 prodrive +pdnb3_config \ +scpu_config: unconfig + @if [ "$(findstring scpu_,$@)" ] ; then \ + echo "#define CONFIG_SCPU" >>include/config.h ; \ + echo "... on SCPU board variant" ; \ + else \ + >include/config.h ; \ + fi + @$(MKCONFIG) -a pdnb3 arm ixp pdnb3 prodrive pxa255_idp_config: unconfig @$(MKCONFIG) $(@:_config=) arm pxa pxa255_idp diff --git a/board/prodrive/pdnb3/flash.c b/board/prodrive/pdnb3/flash.c index d0e5fe703b9..518ea9c0314 100644 --- a/board/prodrive/pdnb3/flash.c +++ b/board/prodrive/pdnb3/flash.c @@ -24,6 +24,8 @@ #include #include +#if !defined(CFG_FLASH_CFI_DRIVER) + /* * include common flash code (for esd boards) */ @@ -83,3 +85,5 @@ unsigned long flash_init(void) return size; } + +#endif /* CFG_FLASH_CFI_DRIVER */ diff --git a/include/configs/pdnb3.h b/include/configs/pdnb3.h index ba6b113d8c2..2cc137ce6a8 100644 --- a/include/configs/pdnb3.h +++ b/include/configs/pdnb3.h @@ -71,12 +71,18 @@ #define CONFIG_BAUDRATE 115200 #define CFG_IXP425_CONSOLE IXP425_UART1 /* we use UART1 for console */ +#if defined(CONFIG_SCPU) +#define CMD_NAND_ADD 0 +#else +#define CMD_NAND_ADD CFG_CMD_NAND +#endif + #define CONFIG_COMMANDS (CONFIG_CMD_DFL | \ CFG_CMD_DHCP | \ CFG_CMD_DATE | \ CFG_CMD_NET | \ CFG_CMD_MII | \ - CFG_CMD_NAND | \ + CMD_NAND_ADD | \ CFG_CMD_I2C | \ CFG_CMD_ELF | \ CFG_CMD_PING) @@ -176,12 +182,20 @@ #define CFG_FLASH_BASE 0x50000000 #define CFG_MONITOR_BASE CFG_FLASH_BASE +#if defined(CONFIG_SCPU) +#define CFG_MONITOR_LEN (384 << 10) /* Reserve 512 kB for Monitor */ +#else #define CFG_MONITOR_LEN (504 << 10) /* Reserve 512 kB for Monitor */ +#endif /* * Expansion bus settings */ +#if defined(CONFIG_SCPU) +#define CFG_EXP_CS0 0x94d23C42 /* 8bit, max size */ +#else #define CFG_EXP_CS0 0x94913C43 /* 8bit, max size */ +#endif #define CFG_EXP_CS1 0x85000043 /* 8bit, 512bytes */ /* @@ -194,6 +208,12 @@ /* * FLASH and environment organization */ +#if defined(CONFIG_SCPU) +#define CFG_FLASH_CFI /* The flash is CFI compatible */ +#define CFG_FLASH_CFI_DRIVER /* Use common CFI driver */ +#define CFG_FLASH_CFI_WIDTH FLASH_CFI_16BIT /* no byte writes on IXP4xx */ +#endif + #define FLASH_BASE0_PRELIM CFG_FLASH_BASE /* FLASH bank #0 */ #define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */ @@ -217,20 +237,27 @@ #define CFG_ENV_IS_IN_FLASH 1 +#if defined(CONFIG_SCPU) +#define CFG_ENV_SECT_SIZE 0x20000 /* size of one complete sector */ +#define CFG_ENV_SIZE 0x4000 /* Total Size of Environment Sector */ +#else #define CFG_ENV_SECT_SIZE 0x1000 /* size of one complete sector */ -#define CFG_ENV_ADDR (CFG_FLASH_BASE + CFG_MONITOR_LEN) #define CFG_ENV_SIZE 0x1000 /* Total Size of Environment Sector */ +#endif +#define CFG_ENV_ADDR (CFG_FLASH_BASE + CFG_MONITOR_LEN) /* Address and size of Redundant Environment Sector */ #define CFG_ENV_ADDR_REDUND (CFG_ENV_ADDR + CFG_ENV_SECT_SIZE) #define CFG_ENV_SIZE_REDUND (CFG_ENV_SIZE) +#if !defined(CONFIG_SCPU) /* * NAND-FLASH stuff */ #define CFG_MAX_NAND_DEVICE 1 #define NAND_MAX_CHIPS 1 #define CFG_NAND_BASE 0x51000000 /* NAND FLASH Base Address */ +#endif /* * GPIO settings @@ -284,9 +311,15 @@ /* * I2C RTC */ +#if 0 /* test-only */ +#define CONFIG_RTC_DS1340 1 +#define CFG_I2C_RTC_ADDR 0x68 +#else +/* M41T11 Serial Access Timekeeper(R) SRAM */ #define CONFIG_RTC_M41T11 1 #define CFG_I2C_RTC_ADDR 0x68 #define CFG_M41T11_BASE_YEAR 1900 /* play along with the linux driver */ +#endif /* * Spartan3 FPGA configuration support -- cgit v1.3.1 From d0b6e14087ddd8789f224a48e1d33f2a5df4d167 Mon Sep 17 00:00:00 2001 From: Heiko Schocher Date: Fri, 19 Jan 2007 18:05:26 +0100 Subject: [PATCH] CFI: define CFG_WRITE_SWAPPED_DATA for the CFI-Flash driver if you must swap the bytes between reading/writing. (Needed for the SC3 board) Signed-off-by: Heiko Schocher --- drivers/cfi_flash.c | 26 ++++++++++---------------- include/configs/sc3.h | 3 +++ 2 files changed, 13 insertions(+), 16 deletions(-) (limited to 'include') diff --git a/drivers/cfi_flash.c b/drivers/cfi_flash.c index 665d8e7649c..696f9a47ada 100644 --- a/drivers/cfi_flash.c +++ b/drivers/cfi_flash.c @@ -40,10 +40,6 @@ #include #ifdef CFG_FLASH_CFI_DRIVER -#if defined(CONFIG_SOLIDCARD3) -#define __LITTLE_ENDIAN -#endif - /* * This file implements a Common Flash Interface (CFI) driver for U-Boot. * The width of the port and the width of the chips are determined at initialization. @@ -58,6 +54,8 @@ * AMD/Spansion Application Note: Migration from Single-byte to Three-byte * Device IDs, Publication Number 25538 Revision A, November 8, 2001 * + * define CFG_WRITE_SWAPPED_DATA, if you have to swap the Bytes between + * reading and writing ... (yes there is such a Hardware). */ #ifndef CFG_FLASH_BANKS_LIST @@ -260,7 +258,7 @@ inline uchar flash_read_uchar (flash_info_t * info, uint offset) uchar *cp; cp = flash_make_addr (info, 0, offset); -#if defined(__LITTLE_ENDIAN) +#if defined(__LITTLE_ENDIAN) || defined(CFG_WRITE_SWAPPED_DATA) return (cp[0]); #else return (cp[info->portwidth - 1]); @@ -287,7 +285,7 @@ ushort flash_read_ushort (flash_info_t * info, flash_sect_t sect, uint offset) debug ("addr[%x] = 0x%x\n", x, addr[x]); } #endif -#if defined(__LITTLE_ENDIAN) +#if defined(__LITTLE_ENDIAN) || defined(CFG_WRITE_SWAPPED_DATA) retval = ((addr[(info->portwidth)] << 8) | addr[0]); #else retval = ((addr[(2 * info->portwidth) - 1] << 8) | @@ -319,7 +317,7 @@ ulong flash_read_long (flash_info_t * info, flash_sect_t sect, uint offset) debug ("addr[%x] = 0x%x\n", x, addr[x]); } #endif -#if defined(__LITTLE_ENDIAN) +#if defined(__LITTLE_ENDIAN) || defined(CFG_WRITE_SWAPPED_DATA) retval = (addr[0] << 16) | (addr[(info->portwidth)] << 24) | (addr[(2 * info->portwidth)]) | (addr[(3 * info->portwidth)] << 8); #else @@ -860,7 +858,7 @@ static int flash_full_status_check (flash_info_t * info, flash_sect_t sector, */ static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c) { -#if defined(__LITTLE_ENDIAN) && !defined(CONFIG_SOLIDCARD3) +#if defined(__LITTLE_ENDIAN) && !defined(CFG_WRITE_SWAPPED_DATA) unsigned short w; unsigned int l; unsigned long long ll; @@ -871,7 +869,7 @@ static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c) cword->c = c; break; case FLASH_CFI_16BIT: -#if defined(__LITTLE_ENDIAN) && !defined(CONFIG_SOLIDCARD3) +#if defined(__LITTLE_ENDIAN) && !defined(CFG_WRITE_SWAPPED_DATA) w = c; w <<= 8; cword->w = (cword->w >> 8) | w; @@ -880,7 +878,7 @@ static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c) #endif break; case FLASH_CFI_32BIT: -#if defined(__LITTLE_ENDIAN) && !defined(CONFIG_SOLIDCARD3) +#if defined(__LITTLE_ENDIAN) && !defined(CFG_WRITE_SWAPPED_DATA) l = c; l <<= 24; cword->l = (cword->l >> 8) | l; @@ -889,7 +887,7 @@ static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c) #endif break; case FLASH_CFI_64BIT: -#if defined(__LITTLE_ENDIAN) && !defined(CONFIG_SOLIDCARD3) +#if defined(__LITTLE_ENDIAN) && !defined(CFG_WRITE_SWAPPED_DATA) ll = c; ll <<= 56; cword->ll = (cword->ll >> 8) | ll; @@ -909,7 +907,7 @@ static void flash_make_cmd (flash_info_t * info, uchar cmd, void *cmdbuf) int i; uchar *cp = (uchar *) cmdbuf; -#if defined(__LITTLE_ENDIAN) +#if defined(__LITTLE_ENDIAN) || defined(CFG_WRITE_SWAPPED_DATA) for (i = info->portwidth; i > 0; i--) #else for (i = 1; i <= info->portwidth; i++) @@ -1535,8 +1533,4 @@ static int flash_write_cfibuffer (flash_info_t * info, ulong dest, uchar * cp, } #endif /* CFG_FLASH_USE_BUFFER_WRITE */ -#if defined(CONFIG_SOLIDCARD3) -#undef __LITTLE_ENDIAN -#endif - #endif /* CFG_FLASH_CFI */ diff --git a/include/configs/sc3.h b/include/configs/sc3.h index a4a16054601..bf2af9923cc 100644 --- a/include/configs/sc3.h +++ b/include/configs/sc3.h @@ -119,6 +119,8 @@ "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0" \ "rootpath=/opt/eldk/ppc_4xx\0" \ "bootfile=/tftpboot/sc3/uImage\0" \ + "u-boot=/tftpboot/sc3/u-boot.bin\0" \ + "setup=tftp 200000 /tftpboot/sc3/setup.img;autoscr 200000\0" \ "kernel_addr=FFE08000\0" \ "" #undef CONFIG_BOOTCOMMAND @@ -384,6 +386,7 @@ extern unsigned long offsetOfEnvironment; #define CFG_FLASH_QUIET_TEST 1 /* don't warn upon unknown flash*/ #define CFG_FLASH_ERASE_TOUT 120000 /* Timeout for Flash Erase (in ms) */ #define CFG_FLASH_WRITE_TOUT 500 /* Timeout for Flash Write (in ms) */ +#define CFG_WRITE_SWAPPED_DATA /* swap Databytes between reading/writing */ #define CFG_ENV_IS_IN_FLASH 1 #if CFG_ENV_IS_IN_FLASH -- cgit v1.3.1 From f539b7ba7d7ef6dd187c8209609001cb1cd95e39 Mon Sep 17 00:00:00 2001 From: Heiko Schocher Date: Fri, 19 Jan 2007 19:57:10 +0100 Subject: [PATCH] SC3 board: added CFG_CMD_AUTOSCRIPT. Signed-off-by: Heiko Schocher --- include/configs/sc3.h | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'include') diff --git a/include/configs/sc3.h b/include/configs/sc3.h index bf2af9923cc..b767449759d 100644 --- a/include/configs/sc3.h +++ b/include/configs/sc3.h @@ -167,18 +167,19 @@ #define CONFIG_COMMANDS \ (CONFIG_CMD_DFL | \ - CFG_CMD_PCI | \ - CFG_CMD_IRQ | \ - CFG_CMD_NET | \ - CFG_CMD_MII | \ - CFG_CMD_PING | \ - CFG_CMD_NAND | \ - CFG_CMD_JFFS2 | \ - CFG_CMD_I2C | \ - CFG_CMD_IDE | \ - CFG_CMD_DATE | \ - CFG_CMD_DHCP | \ - CFG_CMD_CACHE | \ + CFG_CMD_AUTOSCRIPT | \ + CFG_CMD_PCI | \ + CFG_CMD_IRQ | \ + CFG_CMD_NET | \ + CFG_CMD_MII | \ + CFG_CMD_PING | \ + CFG_CMD_NAND | \ + CFG_CMD_JFFS2 | \ + CFG_CMD_I2C | \ + CFG_CMD_IDE | \ + CFG_CMD_DATE | \ + CFG_CMD_DHCP | \ + CFG_CMD_CACHE | \ CFG_CMD_ELF ) /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ -- cgit v1.3.1