Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 08 Aug 2007 16:53:28 +0300
From:      Krassimir Slavchev <krassi@bulinfo.net>
To:        "M. Warner Losh" <imp@bsdimp.com>
Cc:        freebsd-arm@freebsd.org
Subject:   Re: CENTIPAD boot
Message-ID:  <46B9CAD8.4040103@bulinfo.net>
In-Reply-To: <20070808.074028.-749249084.imp@bsdimp.com>
References:  <46B9C68E.2010000@bulinfo.net> <20070808.074028.-749249084.imp@bsdimp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------020401030906010503010909
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Yes

M. Warner Losh wrote:
> can you resend them as a unified diff?
> 
> Warner
> 


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (FreeBSD)

iD8DBQFGucrYxJBWvpalMpkRAj4oAJwOYAKhGu2P20acoOPgrkEQSjyETwCgnvjq
DNWbeBl9Wlk2oIVy6bwUJdY=
=sEQp
-----END PGP SIGNATURE-----

--------------020401030906010503010909
Content-Type: text/plain;
 name="centipad_bootloaders.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="centipad_bootloaders.diff"

Index: boot0spi/main.c
===================================================================
RCS file: /home/ncvs/src/sys/boot/arm/at91/boot0spi/main.c,v
retrieving revision 1.5
diff -u -r1.5 main.c
--- boot0spi/main.c	20 Dec 2006 17:50:02 -0000	1.5
+++ boot0spi/main.c	8 Aug 2007 13:49:19 -0000
@@ -47,10 +47,10 @@
 		continue;
 	// Need extra copy at addr3
 	memcpy(addr3, addr, (len + FLASH_PAGE_SIZE - 1) / FLASH_PAGE_SIZE * FLASH_PAGE_SIZE);
-	printf("Writing %u bytes to flash at %u\n", len, OFFSET);
+	printf("Writing %u bytes to flash at %u\n", len, LOADER_OFFSET);
 	for (i = 0; i < len; i+= FLASH_PAGE_SIZE) {
 		for (j = 0; j < 10; j++) {
-			off = i + OFFSET;
+			off = i + LOADER_OFFSET;
 			SPI_WriteFlash(off, addr + i, FLASH_PAGE_SIZE);
 			SPI_ReadFlash(off, addr2 + i, FLASH_PAGE_SIZE);
 			if (p_memcmp(addr3 + i, addr2 + i, FLASH_PAGE_SIZE) == 0)
Index: bootspi/loader_prompt.c
===================================================================
RCS file: /home/ncvs/src/sys/boot/arm/at91/bootspi/loader_prompt.c,v
retrieving revision 1.4
diff -u -r1.4 loader_prompt.c
--- bootspi/loader_prompt.c	15 Mar 2007 03:31:48 -0000	1.4
+++ bootspi/loader_prompt.c	8 Aug 2007 13:49:21 -0000
@@ -29,7 +29,6 @@
 #include "env_vars.h"
 #include "lib.h"
 #include "spi_flash.h"
-#include "ee.h"
 
 /******************************* GLOBALS *************************************/
 
@@ -286,8 +285,9 @@
 	{
 	    char buf[25];
 		printf("Testing Config EEPROM\n");
-		EEWrite(0, "This is a test", 15);
-		EERead(0, buf, 15);
+		strcpy(buf,"This is a test!");
+		WriteEEPROM(0, buf, 15);
+		ReadEEPROM(0, buf, 15);
 		printf("Found '%s'\n", buf);
 		break;
 	}
Index: bootspi/main.c
===================================================================
RCS file: /home/ncvs/src/sys/boot/arm/at91/bootspi/main.c,v
retrieving revision 1.3
diff -u -r1.3 main.c
--- bootspi/main.c	21 Oct 2006 22:44:26 -0000	1.3
+++ bootspi/main.c	8 Aug 2007 13:49:21 -0000
@@ -41,18 +41,19 @@
 #include "emac.h"
 #include "lib.h"
 #include "spi_flash.h"
-#include "ee.h"
+#include "sd-card.h"
 
 int
 main(void)
 {
 	printf("\nBoot\n");
-	EEInit();
+	InitEEPROM();
 	SPI_InitFlash();
 #ifdef TSC_FPGA
 	fpga_load();
 #endif
 	EMAC_Init();
+	sdcard_init();
 	LoadBootCommands();
 	if (getc(1) == -1) {
 		start_wdog(30);
Index: libat91/Makefile
===================================================================
RCS file: /home/ncvs/src/sys/boot/arm/at91/libat91/Makefile,v
retrieving revision 1.9
diff -u -r1.9 Makefile
--- libat91/Makefile	13 Jul 2007 14:27:04 -0000	1.9
+++ libat91/Makefile	8 Aug 2007 13:49:22 -0000
@@ -8,7 +8,7 @@
 	putchar.c printf.c reset.c spi_flash.c xmodem.c \
 	sd-card.c strcvt.c strlen.c strcmp.c memcpy.c strcpy.c \
 	memset.c memcmp.c
-SRCS+=ashldi3.c divsi3.c
+SRCS+=ashldi3.c divsi3.S
 NO_MAN=
 
 .if ${MK_TAG_LIST} != "no"
Index: libat91/arm_init.S
===================================================================
RCS file: /home/ncvs/src/sys/boot/arm/at91/libat91/arm_init.S,v
retrieving revision 1.2
diff -u -r1.2 arm_init.S
--- libat91/arm_init.S	20 Dec 2006 18:16:49 -0000	1.2
+++ libat91/arm_init.S	8 Aug 2007 13:49:22 -0000
@@ -61,7 +61,7 @@
 #ifdef BOOT_IIC
 		.long	(TWI_EEPROM_SIZE >> 9)
 #else
-#ifdef BOOT_BWCT
+#if defined(BOOT_BWCT) | defined(BOOT_CENTIPAD)
 		.long	((528 << 17) | (13 << 13) | (12 * 2))
 #else
 		.long	((1056 << 17) | (13 << 13) | (12 * 2))
Index: libat91/eeprom.c
===================================================================
RCS file: /home/ncvs/src/sys/boot/arm/at91/libat91/eeprom.c,v
retrieving revision 1.3
diff -u -r1.3 eeprom.c
--- libat91/eeprom.c	20 Dec 2006 18:19:52 -0000	1.3
+++ libat91/eeprom.c	8 Aug 2007 13:49:23 -0000
@@ -33,7 +33,11 @@
 
 /* Use a macro to calculate the TWI clock generator value to save code space. */
 #define AT91C_TWSI_CLOCK	100000
-#define TWSI_EEPROM_ADDRESS	0x50
+#ifdef BOOT_CENTIPAD
+#define TWSI_EEPROM_ADDRESS    0x57
+#else
+#define TWSI_EEPROM_ADDRESS    0x50
+#endif
 
 #define TWI_CLK_BASE_DIV	((AT91C_MASTER_CLOCK/(4*AT91C_TWSI_CLOCK)) - 2)
 #define SET_TWI_CLOCK	((0x00010000) | (TWI_CLK_BASE_DIV) | (TWI_CLK_BASE_DIV << 8))
Index: libat91/emac.c
===================================================================
RCS file: /home/ncvs/src/sys/boot/arm/at91/libat91/emac.c,v
retrieving revision 1.8
diff -u -r1.8 emac.c
--- libat91/emac.c	13 Jul 2007 14:27:04 -0000	1.8
+++ libat91/emac.c	8 Aug 2007 13:49:25 -0000
@@ -321,7 +321,7 @@
 			if (serverPort != udpHdr->src_port)
 				break;
 
-			TFTP_ACK_Data(tftpHdr->data,
+			TFTP_ACK_Data((char *)tftpHdr->data,
 			    SWAP16(tftpHdr->block_num),
 			    SWAP16(udpHdr->udp_len) - 12);
 		}
@@ -339,9 +339,9 @@
  */
 #ifndef BOOT_BWCT
 static unsigned short
-AT91F_MII_ReadPhy (AT91PS_EMAC pEmac, unsigned char addr)
+AT91F_MII_ReadPhy (AT91PS_EMAC pEmac, unsigned char phyaddr, unsigned char addr)
 {
-	unsigned value = 0x60020000 | (addr << 18);
+	unsigned value = 0x60020000 | ((phyaddr & 0x1f) << 23) | (addr << 18);
 
 	pEmac->EMAC_CTL |= AT91C_EMAC_MPE;
 	pEmac->EMAC_MAN = value;
@@ -359,9 +359,9 @@
  */
 #ifdef BOOT_TSC
 static unsigned short
-AT91F_MII_WritePhy (AT91PS_EMAC pEmac, unsigned char addr, unsigned short s)
+AT91F_MII_WritePhy (AT91PS_EMAC pEmac, unsigned char phyaddr, unsigned char addr, unsigned short s)
 {
-	unsigned value = 0x50020000 | (addr << 18) | s;
+	unsigned value = 0x50020000 | ((phyaddr & 0x1f) << 23) | (addr << 18) | s;
 
 	pEmac->EMAC_CTL |= AT91C_EMAC_MPE;
 	pEmac->EMAC_MAN = value;
@@ -380,6 +380,7 @@
 static void
 MII_GetLinkSpeed(AT91PS_EMAC pEmac)
 {
+	unsigned char phyaddr = 0;
 #if defined(BOOT_TSC) || defined(BOOT_KB920X) || defined(BOOT_CENTIPAD)
 	unsigned short stat2; 
 #endif
@@ -388,14 +389,18 @@
 	unsigned sec;
 	int i;
 #endif
-#ifdef BOOT_BWCT
+#ifdef BOOT_CENTIPAD
+       phyaddr = 0x10;
+#endif
+
+#if defined(BOOT_BWCT) | defined(BOOT_CENTIPAD)
 	/* 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
 #if defined(BOOT_KB920X) || defined(BOOT_CENTIPAD)
-	stat2 = AT91F_MII_ReadPhy(pEmac, MII_STS2_REG);
+	stat2 = AT91F_MII_ReadPhy(pEmac, phyaddr, MII_STS2_REG);
 	if (!(stat2 & MII_STS2_LINK))
 		return ;
 	update = pEmac->EMAC_CFG & ~(AT91C_EMAC_SPD | AT91C_EMAC_FD);
@@ -407,7 +412,7 @@
 #ifdef BOOT_TSC
 	while (1) {
 		for (i = 0; i < 10; i++) {
-			stat2 = AT91F_MII_ReadPhy(pEmac, MII_STS_REG);
+			stat2 = AT91F_MII_ReadPhy(pEmac, phyaddr, MII_STS_REG);
 			if (stat2 & MII_STS_LINK_STAT)
 				break;
 			printf(".");
@@ -418,11 +423,11 @@
 		if (stat2 & MII_STS_LINK_STAT)
 			break;
 		printf("Resetting MII...");
-		AT91F_MII_WritePhy(pEmac, 0x0, 0x8000);
-		while (AT91F_MII_ReadPhy(pEmac, 0x0) & 0x8000) continue;
+		AT91F_MII_WritePhy(pEmac, phyaddr, 0x0, 0x8000);
+		while (AT91F_MII_ReadPhy(pEmac, phyaddr, 0x0) & 0x8000) continue;
 	}
 	printf("emac: link");
-	stat2 = AT91F_MII_ReadPhy(pEmac, MII_SPEC_STS_REG);
+	stat2 = AT91F_MII_ReadPhy(pEmac, phyaddr, MII_SPEC_STS_REG);
 	update = pEmac->EMAC_CFG & ~(AT91C_EMAC_SPD | AT91C_EMAC_FD);
 	if (stat2 & (MII_SSTS_100FDX | MII_SSTS_100HDX)) {
 		printf(" 100TX");
Index: libat91/emac_init.c
===================================================================
RCS file: /home/ncvs/src/sys/boot/arm/at91/libat91/emac_init.c,v
retrieving revision 1.4
diff -u -r1.4 emac_init.c
--- libat91/emac_init.c	20 Dec 2006 18:26:37 -0000	1.4
+++ libat91/emac_init.c	8 Aug 2007 13:49:26 -0000
@@ -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;
-#if defined(BOOT_KB920X) | defined(BOOT_BWCT)	/* Really !RMII */
+#if defined(BOOT_KB920X) | defined(BOOT_BWCT) | defined(BOOT_CENTIPAD) /* 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 |
Index: libat91/spi_flash.c
===================================================================
RCS file: /home/ncvs/src/sys/boot/arm/at91/libat91/spi_flash.c,v
retrieving revision 1.4
diff -u -r1.4 spi_flash.c
--- libat91/spi_flash.c	28 Mar 2007 22:38:01 -0000	1.4
+++ libat91/spi_flash.c	8 Aug 2007 13:49:26 -0000
@@ -119,7 +119,7 @@
 	byteAddress = flash_addr % FLASH_PAGE_SIZE;
 
 	p_memset(tx_commandBuffer, 0, 8);
-#ifdef BOOT_BWCT
+#if defined(BOOT_BWCT) | defined(BOOT_CENTIPAD)
 	tx_commandBuffer[0] = 0xd2;
 	tx_commandBuffer[1] = ((pageAddress >> 6) & 0xFF);
 	tx_commandBuffer[2] = ((pageAddress << 2) & 0xFC) |
@@ -177,7 +177,7 @@
 	byteAddress = flash_addr % FLASH_PAGE_SIZE;
 
 	p_memset(tx_commandBuffer, 0, 8);
-#ifdef BOOT_BWCT
+#if defined(BOOT_BWCT) | defined(BOOT_CENTIPAD)
 	tx_commandBuffer[0] = 0x82;
 	tx_commandBuffer[1] = ((pageAddress >> 6) & 0xFF);
 	tx_commandBuffer[2] = ((pageAddress << 2) & 0xFC) |
@@ -256,7 +256,7 @@
 	value = pSPI->SPI_RDR;
 	value = pSPI->SPI_SR;
 
-#ifdef BOOT_BWCT
+#if defined(BOOT_BWCT) | defined(BOOT_CENTIPAD)
 	if (((value = GetFlashStatus()) & 0xFC) != 0xB4)
 		printf(" Bad SPI status: 0x%x\n", value);
 #else
Index: libat91/spi_flash.h
===================================================================
RCS file: /home/ncvs/src/sys/boot/arm/at91/libat91/spi_flash.h,v
retrieving revision 1.2
diff -u -r1.2 spi_flash.h
--- libat91/spi_flash.h	20 Dec 2006 18:25:16 -0000	1.2
+++ libat91/spi_flash.h	8 Aug 2007 13:49:26 -0000
@@ -40,7 +40,7 @@
 
 void SPI_GetId(unsigned *id);
 
-#ifdef BOOT_BWCT
+#if defined(BOOT_BWCT) | defined(BOOT_CENTIPAD)
 #define FLASH_PAGE_SIZE	528
 #else
 #define FLASH_PAGE_SIZE	1056

--------------020401030906010503010909--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?46B9CAD8.4040103>