PERFORCE change 111294 for review
Bernd Walter
ticso at FreeBSD.org
Fri Dec 8 09:59:57 PST 2006
http://perforce.freebsd.org/chv.cgi?CH=111294
Change 111294 by ticso at ticso on 2006/12/08 17:59:00
add BWCT BOOT_FLAVOR
Affected files ...
.. //depot/projects/arm/src/sys/boot/arm/at91/Makefile.inc#30 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/boot2/bwct_board.c#1 add
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/arm_init.S#6 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.h#10 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/emac.c#38 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/emac_init.c#11 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/spi_flash.c#19 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/spi_flash.h#9 edit
Differences ...
==== //depot/projects/arm/src/sys/boot/arm/at91/Makefile.inc#30 (text+ko) ====
@@ -5,7 +5,7 @@
__at91_boot_Makefile.inc__:
-# tsc, kb920x are the supported flavors
+# tsc, bwct, kb920x are the supported flavors
BOOT_FLAVOR=kb920x
CFLAGS=-Os -mcpu=arm9 -ffreestanding \
==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/arm_init.S#6 (text+ko) ====
@@ -61,8 +61,12 @@
#ifdef BOOT_IIC
.long (TWI_EEPROM_SIZE >> 9)
#else
+#ifdef BOOT_BWCT
+ .long ((528 << 17) | (13 << 13) | (12 * 2))
+#else
.long ((1056 << 17) | (13 << 13) | (12 * 2))
#endif
+#endif
irqvec:
ldr pc, [pc,#-0xF20] @; IRQ : read the AIC
fiqvec:
@@ -110,10 +114,10 @@
.string " "
#else
#if 1
- .string "m 42 53 44 0 0 1"
- .string "ip 206 168 13 194"
- .string "server_ip 206 168 13 207"
- .string "tftp 0x20000000 kernel.bin"
+ .string "m 00 0e 42 02 00 21 "
+ .string "ip 10 1 1 4 "
+ .string "server_ip 10 1 1 9 "
+ .string "tftp 0x20000000 kernel.bin "
.string "e 0x20000000"
#else
.string "m 42 53 44 0 0 1"
==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.h#10 (text) ====
@@ -39,6 +39,14 @@
#define OSC_MAIN_MULT 90
#endif
+#ifdef BOOT_BWCT
+/* The following divisor sets PLLA frequency: e.g. 16/4 * 45 = 180MHz */
+#define OSC_MAIN_FREQ_DIV 4 /* for 16MHz osc */
+#define SDRAM_WIDTH AT91C_SDRC_DBW_32_BITS
+typedef unsigned int sdram_size_t;
+#define OSC_MAIN_MULT 45
+#endif
+
#ifdef BOOT_TSC
/* The following divisor sets PLLA frequency: e.g. 16/4 * 45 = 180MHz */
#define OSC_MAIN_FREQ_DIV 4 /* for 16MHz osc */
==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/emac.c#38 (text+ko) ====
@@ -337,6 +337,7 @@
* This private function reads the PHY device.
* .KB_C_FN_DEFINITION_END
*/
+#ifndef BOOT_BWCT
static unsigned short
AT91F_MII_ReadPhy (AT91PS_EMAC pEmac, unsigned char addr)
{
@@ -348,6 +349,7 @@
pEmac->EMAC_CTL &= ~AT91C_EMAC_MPE;
return (pEmac->EMAC_MAN & 0x0000ffff);
}
+#endif
/*
* .KB_C_FN_DEFINITION_START
@@ -378,12 +380,20 @@
static void
MII_GetLinkSpeed(AT91PS_EMAC pEmac)
{
+#if defined(BOOT_TSC) | defined(BOOT_KB920X)
unsigned short stat2;
+#endif
unsigned update;
#ifdef BOOT_TSC
unsigned sec;
int i;
#endif
+#ifdef BOOT_BWCT
+ /* hardcoded link speed since we connect a switch via MII */
+ update = pEmac->EMAC_CFG & ~(AT91C_EMAC_SPD | AT91C_EMAC_FD);
+ update |= AT91C_EMAC_SPD;
+ update |= AT91C_EMAC_FD;
+#endif
#ifdef BOOT_KB920X
stat2 = AT91F_MII_ReadPhy(pEmac, MII_STS2_REG);
if (!(stat2 & MII_STS2_LINK))
==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/emac_init.c#11 (text+ko) ====
@@ -94,7 +94,7 @@
AT91C_PA8_ETXEN | AT91C_PA16_EMDIO | AT91C_PA9_ETX0 |
AT91C_PA10_ETX1 | AT91C_PA11_ECRS_ECRSDV | AT91C_PA15_EMDC |
AT91C_PA7_ETXCK_EREFCK;
-#ifdef BOOT_KB920X /* Really !RMII */
+#if defined(BOOT_KB920X) | defined(BOOT_BWCT) /* Really !RMII */
AT91C_BASE_PIOB->PIO_BSR =
AT91C_PB12_ETX2 | AT91C_PB13_ETX3 | AT91C_PB14_ETXER |
AT91C_PB15_ERX2 | AT91C_PB16_ERX3 | AT91C_PB17_ERXDV |
==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/spi_flash.c#19 (text+ko) ====
@@ -119,6 +119,23 @@
byteAddress = flash_addr % FLASH_PAGE_SIZE;
p_memset(tx_commandBuffer, 0, 8);
+#ifdef BOOT_BWCT
+ tx_commandBuffer[0] = 0xd2;
+ tx_commandBuffer[1] = ((pageAddress >> 6) & 0xFF);
+ tx_commandBuffer[2] = ((pageAddress << 2) & 0xFC) |
+ ((byteAddress >> 8) & 0x3);
+ tx_commandBuffer[3] = byteAddress & 0xFF;
+ spi_command.tx_cmd = tx_commandBuffer;
+ spi_command.tx_cmd_size = 8;
+ spi_command.tx_data_size = size;
+ spi_command.tx_data = dest_addr;
+
+ p_memset(rx_commandBuffer, 0, 8);
+ spi_command.rx_cmd = rx_commandBuffer;
+ spi_command.rx_cmd_size = 8;
+ spi_command.rx_data_size = size;
+ spi_command.rx_data = dest_addr;
+#else
tx_commandBuffer[0] = CONTINUOUS_ARRAY_READ_HF;
tx_commandBuffer[1] = ((pageAddress >> 5) & 0xFF);
tx_commandBuffer[2] = ((pageAddress << 3) & 0xF8) |
@@ -134,6 +151,7 @@
spi_command.rx_cmd_size = 5;
spi_command.rx_data_size = size;
spi_command.rx_data = dest_addr;
+#endif
SendCommand(&spi_command);
}
@@ -159,11 +177,19 @@
byteAddress = flash_addr % FLASH_PAGE_SIZE;
p_memset(tx_commandBuffer, 0, 8);
+#ifdef BOOT_BWCT
+ tx_commandBuffer[0] = 0x82;
+ tx_commandBuffer[1] = ((pageAddress >> 6) & 0xFF);
+ tx_commandBuffer[2] = ((pageAddress << 2) & 0xFC) |
+ ((byteAddress >> 8) & 0x3);
+ tx_commandBuffer[3] = (byteAddress & 0xFF);
+#else
tx_commandBuffer[0] = PROGRAM_THROUGH_BUFFER;
tx_commandBuffer[1] = ((pageAddress >> 5) & 0xFF);
tx_commandBuffer[2] = ((pageAddress << 3) & 0xF8) |
((byteAddress >> 8) & 0x7);
tx_commandBuffer[3] = (byteAddress & 0xFF);
+#endif
p_memset(rx_commandBuffer, 0, 8);
@@ -233,6 +259,11 @@
// Increment real time counter every SLCK
AT91C_BASE_ST->ST_RTMR = 1;
+#ifdef BOOT_BWCT
+ if (((value = GetFlashStatus()) & 0xFC) != 0xB4)
+ printf(" Bad SPI status: 0x%x\n", value);
+#else
if (((value = GetFlashStatus()) & 0xFC) != 0xBC)
printf(" Bad SPI status: 0x%x\n", value);
+#endif
}
==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/spi_flash.h#9 (text+ko) ====
@@ -40,7 +40,11 @@
void SPI_GetId(unsigned *id);
+#ifdef BOOT_BWCT
+#define FLASH_PAGE_SIZE 528
+#else
#define FLASH_PAGE_SIZE 1056
+#endif
// Flash commands
More information about the p4-projects
mailing list