--- uClinux-dist-orig/linux-2.6.x/arch/blackfin/Kconfig 2008-01-31 02:12:59.000000000 +1030 +++ uClinux-dist/linux-2.6.x/arch/blackfin/Kconfig 2008-03-23 06:28:15.000000000 +1030 @@ -260,9 +260,12 @@ default y config MEM_MT48LC32M16A2TG_75 - bool - depends on (BFIN527_EZKIT) + bool + depends on (BFIN527_EZKIT || BFIN532_IP0X) default y + help + refresh period 64mS, 8192 row addresses, CAS Latency 3, 10 col addresses + source "arch/blackfin/mach-bf527/Kconfig" source "arch/blackfin/mach-bf533/Kconfig" @@ -293,6 +296,7 @@ default "25000000" if (BFIN537_STAMP || BFIN527_EZKIT || H8606_HVSISTEMAS) default "30000000" if BFIN561_EZKIT default "24576000" if PNAV10 + default "10000000" if BFIN532_IP0X help The frequency of CLKIN crystal oscillator on the board in Hz. @@ -425,6 +429,7 @@ default 128 if BFIN533_STAMP default 64 if PNAV10 default 32 if H8606_HVSISTEMAS + default 64 if BFIN532_IP0X config MEM_ADD_WIDTH int "SDRAM Memory Address Width" @@ -436,6 +441,7 @@ default 10 if BFIN537_STAMP default 11 if BFIN533_STAMP default 10 if PNAV10 + default 10 if BFIN532_IP0X choice @@ -460,6 +466,27 @@ code. For example: PF0 --> 0,PF1 --> 1,PF2 --> 2, etc. +comment "Hardware addresses" + +config IP0X_NET1 + hex "DM9000 eth0 hardware address" + default 0x20100000 + help + Base address of DM9000A Ethernet chip used for eth0 + +config IP0X_NET2 + hex "DM9000 eth1 hardware address" + default 0x20200000 + help + Base address of DM9000A Ethernet chip used for eth1 + +config IP0X_USB + hex "ISP1362 address" + default 0x20300000 + help + Base address of ISP1362 USB controller + + config BOOT_LOAD hex "Kernel load address for booting" default "0x1000" --- uClinux-dist-orig/linux-2.6.x/arch/blackfin/mach-bf533/boards/Kconfig 2007-11-04 05:22:49.000000000 +1030 +++ uClinux-dist/linux-2.6.x/arch/blackfin/mach-bf533/boards/Kconfig 2008-03-23 06:11:01.000000000 +1030 @@ -26,6 +26,12 @@ help HV Sistemas H8606 board support. +config BFIN532_IP0X + bool "IP04/IP08 IP-PBX" + depends on (BF532) + help + Core support for IP04/IP04 open hardware IP-PBX. + config GENERIC_BF533_BOARD bool "Generic" help --- uClinux-dist-orig/linux-2.6.x/arch/blackfin/mach-bf533/boards/ip0x.c 1970-01-01 09:30:00.000000000 +0930 +++ uClinux-dist/linux-2.6.x/arch/blackfin/mach-bf533/boards/ip0x.c 2008-03-23 06:18:00.000000000 +1030 @@ -0,0 +1,288 @@ +/* + * File: arch/blackfin/mach-bf533/ip0x.c + * Based on: arch/blackfin/mach-bf533/bf1.c + * Based on: arch/blackfin/mach-bf533/stamp.c + * Author: Ivan Danov + * Modified for IP0X David Rowe + * + * Created: 2007 + * Description: Board info file for the IP04/IP08 boards, which + * are derived from the BlackfinOne V2.0 boards. + * + * Modified: + * COpyright 2007 David Rowe + * Copyright 2006 Intratrade Ltd. + * Copyright 2005 National ICT Australia (NICTA) + * Copyright 2004-2006 Analog Devices Inc. + * + * 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, see the file COPYING, or write + * to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include +#if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) +#include +#endif +#include +#include + +/* + * Name the Board for the /proc/cpuinfo + */ +#if defined (CONFIG_BFIN532_IP0X) +const char bfin_board_name[] = "IP04/IP08"; +#else +#error Unknown board +#endif + +/* + * Driver needs to know address, irq and flag pin. + */ +#if defined (CONFIG_BFIN532_IP0X) +#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE) + +#include + +static struct resource dm9000_resource1[] = { + [0] = { + .start = CONFIG_IP0X_NET1, + .end = CONFIG_IP0X_NET1 + 1, + .flags = IORESOURCE_MEM + }, + [1] = { + .start = CONFIG_IP0X_NET1 + 2, + .end = CONFIG_IP0X_NET1 + 3, + .flags = IORESOURCE_MEM + }, + [2] = { + .start = IRQ_PF15, + .end = IRQ_PF15, + .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE + } +}; + +static struct resource dm9000_resource2[] = { + [0] = { + .start = CONFIG_IP0X_NET2, + .end = CONFIG_IP0X_NET2 + 1, + .flags = IORESOURCE_MEM + }, + [1] = { + .start = CONFIG_IP0X_NET2 + 2, + .end = CONFIG_IP0X_NET2 + 3, + .flags = IORESOURCE_MEM + }, + [2] = { + .start = IRQ_PF14, + .end = IRQ_PF14, + .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE + } +}; + +/* +* for the moment we limit ourselves to 16bit IO until some +* better IO routines can be written and tested +*/ +static struct dm9000_plat_data dm9000_platdata1 = { + .flags = DM9000_PLATF_16BITONLY, +}; + +static struct platform_device dm9000_device1 = { + .name = "dm9000", + .id = 0, + .num_resources = ARRAY_SIZE(dm9000_resource1), + .resource = dm9000_resource1, + .dev = { + .platform_data = &dm9000_platdata1, + } +}; + +static struct dm9000_plat_data dm9000_platdata2 = { + .flags = DM9000_PLATF_16BITONLY, +}; + +static struct platform_device dm9000_device2 = { + .name = "dm9000", + .id = 1, + .num_resources = ARRAY_SIZE(dm9000_resource2), + .resource = dm9000_resource2, + .dev = { + .platform_data = &dm9000_platdata2, + } +}; + +#endif +#endif // #if defined (CONFIG_BF532_IP0X) + + +#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) +/* all SPI peripherals info goes here */ + +#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) +static struct bfin5xx_spi_chip spi_mmc_chip_info = { +//CPOL (Clock Polarity) +// 0 - Active high SCK +// 1 - Active low SCK +// CPHA (Clock Phase) Selects transfer format and operation mode +// 0 - SCLK toggles from middle of the first data bit, slave select +// pins controlled by hardware. +// 1 - SCLK toggles from beginning of first data bit, slave select +// pins controller by user software. +// .ctl_reg = 0x1c00, // CPOL=1,CPHA=1,Sandisk 1G work +//NO NO .ctl_reg = 0x1800, // CPOL=1,CPHA=0 +//NO NO .ctl_reg = 0x1400, // CPOL=0,CPHA=1 + .ctl_reg = 0x1000, // CPOL=0,CPHA=0,Sandisk 1G work + .enable_dma = 0, // if 1 - block!!! + .bits_per_word = 8, + .cs_change_per_word = 0, +}; +#endif + +/* Notice: for blackfin, the speed_hz is the value of register + * SPI_BAUD, not the real baudrate */ +static struct spi_board_info bfin_spi_board_info[] __initdata = { +#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) + { + .modalias = "spi_mmc", + .max_speed_hz = 2, + .bus_num = 1, + .chip_select = CONFIG_SPI_MMC_CS_CHAN, + .platform_data = NULL, + .controller_data = &spi_mmc_chip_info, + }, +#endif +}; + +/* SPI controller data */ +static struct bfin5xx_spi_master spi_bfin_master_info = { + .num_chipselect = 8, + .enable_dma = 1, /* master has the ability to do dma transfer */ +}; + +static struct platform_device spi_bfin_master_device = { + .name = "bfin-spi-master", + .id = 1, /* Bus number */ + .dev = { + .platform_data = &spi_bfin_master_info, /* Passed to driver */ + }, +}; +#endif /* spi master and devices */ + +#if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) +static struct resource bfin_uart_resources[] = { + { + .start = 0xFFC00400, + .end = 0xFFC004FF, + .flags = IORESOURCE_MEM, + }, +}; + +static struct platform_device bfin_uart_device = { + .name = "bfin-uart", + .id = 1, + .num_resources = ARRAY_SIZE(bfin_uart_resources), + .resource = bfin_uart_resources, +}; +#endif + +#if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) +static struct resource isp1362_hcd_resources[] = { + { + .start = CONFIG_IP0X_USB, + .end = CONFIG_IP0X_USB + 1, + .flags = IORESOURCE_MEM, + },{ + .start = CONFIG_IP0X_USB + 2, + .end = CONFIG_IP0X_USB + 3, + .flags = IORESOURCE_MEM, + },{ + .start = IRQ_PF11, + .end = IRQ_PF11, + .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, + }, +}; + +static struct isp1362_platform_data isp1362_priv = { + .sel15Kres = 1, + .clknotstop = 0, + .oc_enable = 0, // external OC + .int_act_high = 0, + .int_edge_triggered = 0, + .remote_wakeup_connected = 0, + .no_power_switching = 1, + .power_switching_mode = 0, +}; + +static struct platform_device isp1362_hcd_device = { + .name = "isp1362-hcd", + .id = 0, + .dev = { + .platform_data = &isp1362_priv, + }, + .num_resources = ARRAY_SIZE(isp1362_hcd_resources), + .resource = isp1362_hcd_resources, +}; +#endif + + +static struct platform_device *ip0x_devices[] __initdata = { +#if defined (CONFIG_BFIN532_IP0X) +#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE) + &dm9000_device1, + &dm9000_device2, +#endif +#endif + +#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) + &spi_bfin_master_device, +#endif + +#if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) + &bfin_uart_device, +#endif +#if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) + &isp1362_hcd_device, +#endif +}; + +static int __init ip0x_init(void) +{ + u_int i, j; + + printk(KERN_INFO "%s(): chip_id=%08lX,dspid=%08X\n", + __FUNCTION__, + *((volatile unsigned long *)CHIPID), + bfin_read_DSPID()); + + printk(KERN_INFO "%s(): registering device resources\n", __FUNCTION__); + platform_add_devices(ip0x_devices, ARRAY_SIZE(ip0x_devices)); +#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) + for (i = 0; i < ARRAY_SIZE(bfin_spi_board_info); i ++) { + j = 1 << bfin_spi_board_info [i]. chip_select; + // set spi cs to 1 + bfin_write_FIO_DIR (bfin_read_FIO_DIR() | j); + bfin_write_FIO_FLAG_S (j); + } + spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info)); +#endif + return 0; +} + +arch_initcall(ip0x_init); --- uClinux-dist-orig/linux-2.6.x/include/asm-blackfin/mach-bf533/mem_init.h 2007-05-17 20:27:29.000000000 +0930 +++ uClinux-dist/linux-2.6.x/include/asm-blackfin/mach-bf533/mem_init.h 2008-03-22 13:44:14.000000000 +1030 @@ -29,7 +29,15 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#if (CONFIG_MEM_MT48LC16M16A2TG_75 || CONFIG_MEM_MT48LC64M4A2FB_7E || CONFIG_MEM_GENERIC_BOARD) +#if ( CONFIG_MEM_MT48LC16M16A2TG_75 || + CONFIG_MEM_MT48LC16M16A2TG_7E || + CONFIG_MEM_MT48LC8M16A2TG_75 || + CONFIG_MEM_MT48LC8M16A2TG_7E || + CONFIG_MEM_MT48LC32M16A2TG_75 || + CONFIG_MEM_MT48LC32M16A2TG_7E || + CONFIG_MEM_MT48LC64M4A2FB_7E || + CONFIG_MEM_GENERIC_BOARD) + #if (CONFIG_SCLK_HZ > 119402985) #define SDRAM_tRP TRP_2 #define SDRAM_tRP_num 2 @@ -118,6 +126,13 @@ #define SDRAM_CL CL_3 #endif +#if (CONFIG_MEM_MT48LC32M16A2TG_75) + /*SDRAM INFORMATION: */ +#define SDRAM_Tref 64 /* Refresh period in milliseconds */ +#define SDRAM_NRA 8192 /* Number of row addresses in SDRAM */ +#define SDRAM_CL CL_3 +#endif + #if (CONFIG_MEM_GENERIC_BOARD) /*SDRAM INFORMATION: Modify this for your board */ #define SDRAM_Tref 64 /* Refresh period in milliseconds */ --- uClinux-dist-orig/linux-2.6.x/arch/blackfin/mach-bf533/boards/Makefile 2007-11-04 05:22:49.000000000 +1030 +++ uClinux-dist/linux-2.6.x/arch/blackfin/mach-bf533/boards/Makefile 2008-03-23 05:48:03.000000000 +1030 @@ -4,6 +4,7 @@ obj-$(CONFIG_GENERIC_BF533_BOARD) += generic_board.o obj-$(CONFIG_BFIN533_STAMP) += stamp.o +obj-$(CONFIG_BFIN532_IP0X) += ip0x.o obj-$(CONFIG_BFIN533_EZKIT) += ezkit.o obj-$(CONFIG_BFIN533_BLUETECHNIX_CM) += cm_bf533.o obj-$(CONFIG_H8606_HVSISTEMAS) += H8606.o --- uClinux-dist-orig/linux-2.6.x/drivers/mtd/nand/bfin_nand.c 2008-01-16 17:52:34.000000000 +1030 +++ uClinux-dist/linux-2.6.x/drivers/mtd/nand/bfin_nand.c 2008-03-22 13:44:14.000000000 +1030 @@ -56,21 +56,13 @@ { .name = "linux kernel", .offset = 0, - .size = 4 *1024*1024, + .size = 0x800000, }, -#ifdef CONFIG_PNAV10 /* 1G x 8 NAND Flash */ { .name = "file system", - .offset = 4 *1024*1024, - .size = (1024-4) *1024*1024, + .offset = 0x800000, + .size = (CONFIG_BFIN_NAND_SIZE-0x800000), } -#else - { - .name = "file system", - .offset = 4 *1024*1024, - .size = (128-4) *1024*1024, - } -#endif }; /* --- uClinux-dist-orig/linux-2.6.x/drivers/mtd/nand/Kconfig 2007-11-04 06:09:40.000000000 +1030 +++ uClinux-dist/linux-2.6.x/drivers/mtd/nand/Kconfig 2008-03-22 13:44:14.000000000 +1030 @@ -47,10 +47,20 @@ config BFIN_NAND_BASE hex "NAND Flash Base Address" depends on MTD_NAND_BFIN - default 0x20212000 + default 0x20000000 help NAND Flash Base Address +config BFIN_NAND_SIZE + hex "NAND Flash Size" + depends on MTD_NAND_BFIN + default 0x10000000 + help + NAND Flash size, for example 0x10000000 for 256Mbyte, or + 0x02000000 for 32MByte. The NAND will be divided into + two partitions. The first partition is 8M (kernel), the + second partition the remaining space (e.g. yaffs). + config BFIN_NAND_CLE int "NAND Flash Command Latch Enable (CLE) Address strobe A[x]" depends on MTD_NAND_BFIN @@ -73,7 +83,7 @@ range 0 15 if (BF533 || BF532 || BF531) range 0 47 if (BF534 || BF536 || BF537) range 0 47 if BF561 - default 3 + default 10 help NAND Flash Ready Strobe PF[x] --- uClinux-dist-orig/linux-2.6.x/drivers/net/dm9000.c 2007-10-23 03:13:17.000000000 +0930 +++ uClinux-dist/linux-2.6.x/drivers/net/dm9000.c 2008-03-22 13:44:14.000000000 +1030 @@ -392,6 +392,32 @@ } } +static inline unsigned char str2hexnum(unsigned char c) +{ + if(c >= '0' && c <= '9') + return c - '0'; + if(c >= 'a' && c <= 'f') + return c - 'a' + 10; + if(c >= 'A' && c <= 'F') + return c - 'A' + 10; + return 0; /* foo */ +} + +static inline void str2eaddr(unsigned char *ea, unsigned char *str) +{ + int i; + + for(i = 0; i < 6; i++) { + unsigned char num; + + if((*str == '.') || (*str == ':')) + str++; + num = str2hexnum(*str++) << 4; + num |= (str2hexnum(*str++)); + ea[i] = num; + } +} + #define res_size(_r) (((_r)->end - (_r)->start) + 1) /* @@ -408,6 +434,9 @@ int iosize; int i; u32 id_val; + char *pmac; + char ethaddr[6]; + char s[30]; /* Init network device */ ndev = alloc_etherdev(sizeof (struct board_info)); @@ -585,6 +614,18 @@ for (i = 0; i < 6; i++) ndev->dev_addr[i] = db->srom[i]; + /* Check the command line argument */ + if (pdev-> id) + sprintf (s, "ethaddr%i", pdev-> id); + else + strcpy (s, "ethaddr"); + if (((pmac = strstr(saved_command_line, s)) != NULL) && + ((pmac = strstr(pmac, "=")) != NULL)) { + + str2eaddr(ethaddr, pmac + 1); + memcpy(ndev->dev_addr, ethaddr, 6); + } + if (!is_valid_ether_addr(ndev->dev_addr)) { /* try reading from mac */ --- uClinux-dist-orig/linux-2.6.x/drivers/serial/bfin_5xx.c 2008-03-11 13:37:19.000000000 +1030 +++ uClinux-dist/linux-2.6.x/drivers/serial/bfin_5xx.c 2008-03-22 13:44:14.000000000 +1030 @@ -1021,7 +1021,7 @@ { struct bfin_serial_port *uart; # ifdef CONFIG_SERIAL_BFIN_CONSOLE - int baud = 57600; + int baud = 115200; int bits = 8; int parity = 'n'; # ifdef CONFIG_SERIAL_BFIN_CTSRTS