-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support for Artila M-501 starter kit
Kimmo Leppala / Sysart and Timo Tuunainen / Sysart
- Loading branch information
Timo Tuunainen
authored and
Peter Pearse
committed
Feb 14, 2008
1 parent
fe891ec
commit ea8d989
Showing
12 changed files
with
985 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -509,3 +509,19 @@ N: Nobuhiro Iwamatsu | |
E: [email protected] | ||
D: Support for SuperH, MS7750SE01 and MS7722SE01 boards. | ||
W: http://www.nigauri.org/~iwamatsu/ | ||
|
||
N: Alan Lu | ||
E: [email protected] | ||
D: Support for Artila M-501 starter kit | ||
W: http://www.artila.com/ | ||
|
||
N: Kimmo Leppala | ||
E: [email protected] | ||
D: Support for Artila M-501 starter kit | ||
W: http://www.sysart.fi/ | ||
|
||
N: Timo Tuunainen | ||
E: [email protected] | ||
D: Support for Artila M-501 starter kit | ||
W: http://www.sysart.fi/ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -459,6 +459,7 @@ LIST_ARM9=" \ | |
cp946es \ | ||
cp966 \ | ||
lpd7a400 \ | ||
m501sk \ | ||
mp2usb \ | ||
mx1ads \ | ||
mx1fs2 \ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
# | ||
# (C) Copyright 2003 | ||
# Wolfgang Denk, DENX Software Engineering, [email protected]. | ||
# | ||
# 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 := m501sk.o eeprom.o | ||
|
||
SOBJS := memsetup.o | ||
|
||
$(LIB): $(OBJS) $(SOBJS) | ||
$(AR) crv $@ $(OBJS) $(SOBJS) | ||
|
||
clean: | ||
rm -f $(SOBJS) $(OBJS) | ||
|
||
distclean: clean | ||
rm -f $(LIB) core *.bak .depend | ||
|
||
######################################################################### | ||
|
||
.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) | ||
$(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ | ||
|
||
-include .depend | ||
|
||
######################################################################### |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
TEXT_BASE = 0x21f00000 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
/* | ||
* Add by Alan Lu, 07-29-2005 | ||
* For ATMEL AT24C16 EEPROM | ||
* | ||
* 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 <common.h> | ||
#include <i2c.h> | ||
#ifdef CFG_EEPROM_AT24C16 | ||
#undef DEBUG | ||
|
||
void eeprom_init(void) | ||
{ | ||
#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C) | ||
i2c_init(CFG_I2C_SPEED, CFG_I2C_SLAVE); | ||
#endif | ||
} | ||
|
||
int eeprom_read(unsigned dev_addr, unsigned offset, uchar *buffer, | ||
unsigned cnt) | ||
{ | ||
int page, count = 0, i = 0; | ||
page = offset / 0x100; | ||
i = offset % 0x100; | ||
|
||
while (count < cnt) { | ||
if (i2c_read(dev_addr|page, i++, 1, buffer+count++, 1) != 0) | ||
return 1; | ||
if (i > 0xff) { | ||
page++; | ||
i = 0; | ||
} | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
/* | ||
* for CFG_I2C_EEPROM_ADDR_LEN == 2 (16-bit EEPROM address) offset is | ||
* 0x000nxxxx for EEPROM address selectors at n, offset xxxx in EEPROM. | ||
* | ||
* for CFG_I2C_EEPROM_ADDR_LEN == 1 (8-bit EEPROM page address) offset is | ||
* 0x00000nxx for EEPROM address selectors and page number at n. | ||
*/ | ||
int eeprom_write(unsigned dev_addr, unsigned offset, uchar *buffer, | ||
unsigned cnt) | ||
{ | ||
int page, i = 0, count = 0; | ||
|
||
page = offset / 0x100; | ||
i = offset % 0x100; | ||
|
||
while (count < cnt) { | ||
if (i2c_write(dev_addr|page, i++, 1, buffer+count++, 1) != 0) | ||
return 1; | ||
if (i > 0xff) { | ||
page++; | ||
i = 0; | ||
} | ||
} | ||
|
||
#if defined(CFG_EEPROM_PAGE_WRITE_DELAY_MS) | ||
udelay(CFG_EEPROM_PAGE_WRITE_DELAY_MS * 1000); | ||
#endif | ||
|
||
return 0; | ||
} | ||
|
||
#ifndef CONFIG_SPI | ||
int eeprom_probe(unsigned dev_addr, unsigned offset) | ||
{ | ||
unsigned char chip; | ||
|
||
/* Probe the chip address */ | ||
#if CFG_I2C_EEPROM_ADDR_LEN == 1 && !defined(CONFIG_SPI_X) | ||
chip = offset >> 8; /* block number */ | ||
#else | ||
chip = offset >> 16; /* block number */ | ||
#endif /* CFG_I2C_EEPROM_ADDR_LEN, CONFIG_SPI_X */ | ||
|
||
chip |= dev_addr; /* insert device address */ | ||
return (i2c_probe(chip)); | ||
} | ||
#endif | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,194 @@ | ||
/* | ||
* (C) Copyright 2008 | ||
* Based on modifications by Alan Lu / Artila | ||
* Author : Timo Tuunainen / Sysart | ||
Kimmo Leppala / Sysart | ||
* | ||
* 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 <common.h> | ||
#include <at91rm9200_net.h> | ||
#include <dm9161.h> | ||
#include "m501sk.h" | ||
#include "net.h" | ||
|
||
#ifdef CONFIG_M501SK | ||
|
||
void m501sk_gpio_init(void) | ||
{ | ||
AT91C_BASE_PIOD->PIO_PER = 1 << (M501SK_DEBUG_LED1 - 96) | | ||
1 << (M501SK_DEBUG_LED2 - 96) | 1 << (M501SK_DEBUG_LED3 - 96) | | ||
1 << (M501SK_DEBUG_LED4 - 96) | 1 << (M501SK_READY_LED - 96); | ||
|
||
AT91C_BASE_PIOD->PIO_OER = 1 << (M501SK_DEBUG_LED1 - 96) | | ||
1 << (M501SK_DEBUG_LED2 - 96) | 1 << (M501SK_DEBUG_LED3 - 96) | | ||
1 << (M501SK_DEBUG_LED4 - 96) | 1 << (M501SK_READY_LED - 96); | ||
|
||
AT91C_BASE_PIOD->PIO_SODR = 1 << (M501SK_READY_LED - 96); | ||
AT91C_BASE_PIOD->PIO_CODR = 1 << (M501SK_DEBUG_LED3 - 96); | ||
AT91C_BASE_PIOB->PIO_PER = 1 << (M501SK_BUZZER - 32); | ||
AT91C_BASE_PIOB->PIO_OER = 1 << (M501SK_BUZZER - 32); | ||
AT91C_BASE_PIOC->PIO_PDR = (1 << 7) | (1 << 8); | ||
|
||
/* Power OFF all USART's LEDs */ | ||
AT91C_BASE_PIOA->PIO_PER = AT91C_PA5_TXD3 | AT91C_PA6_RXD3 | | ||
AT91C_PA17_TXD0 | AT91C_PA18_RXD0 | AT91C_PA22_RXD2 | \ | ||
AT91C_PA23_TXD2; | ||
|
||
AT91C_BASE_PIOA->PIO_OER = AT91C_PA5_TXD3 | AT91C_PA6_RXD3 | | ||
AT91C_PA17_TXD0 | AT91C_PA18_RXD0 | AT91C_PA22_RXD2 | \ | ||
AT91C_PA23_TXD2; | ||
|
||
AT91C_BASE_PIOA->PIO_SODR = AT91C_PA5_TXD3 | AT91C_PA6_RXD3 | | ||
AT91C_PA17_TXD0 | AT91C_PA18_RXD0 | AT91C_PA22_RXD2 | \ | ||
AT91C_PA23_TXD2; | ||
|
||
AT91C_BASE_PIOB->PIO_PER = AT91C_PB20_RXD1 | AT91C_PB21_TXD1; | ||
AT91C_BASE_PIOB->PIO_OER = AT91C_PB20_RXD1 | AT91C_PB21_TXD1; | ||
AT91C_BASE_PIOB->PIO_SODR = AT91C_PB20_RXD1 | AT91C_PB21_TXD1; | ||
} | ||
|
||
uchar m501sk_gpio_set(M501SK_PIO io) | ||
{ | ||
uchar status = 0xff; | ||
switch (io) { | ||
case M501SK_DEBUG_LED1: | ||
case M501SK_DEBUG_LED2: | ||
case M501SK_DEBUG_LED3: | ||
case M501SK_DEBUG_LED4: | ||
case M501SK_READY_LED: | ||
AT91C_BASE_PIOD->PIO_SODR = 1 << (io - 96); | ||
status = AT91C_BASE_PIOD->PIO_ODSR & (1 << (io - 96)); | ||
break; | ||
case M501SK_BUZZER: | ||
AT91C_BASE_PIOB->PIO_SODR = 1 << (io - 32); | ||
status = AT91C_BASE_PIOB->PIO_ODSR & (1 << (io - 32)); | ||
break; | ||
} | ||
return status; | ||
} | ||
|
||
uchar m501sk_gpio_clear(M501SK_PIO io) | ||
{ | ||
uchar status = 0xff; | ||
switch (io) { | ||
case M501SK_DEBUG_LED1: | ||
case M501SK_DEBUG_LED2: | ||
case M501SK_DEBUG_LED3: | ||
case M501SK_DEBUG_LED4: | ||
case M501SK_READY_LED: | ||
AT91C_BASE_PIOD->PIO_CODR = 1 << (io - 96); | ||
status = AT91C_BASE_PIOD->PIO_ODSR & (1 << (io - 96)); | ||
break; | ||
case M501SK_BUZZER: | ||
AT91C_BASE_PIOB->PIO_CODR = 1 << (io - 32); | ||
status = AT91C_BASE_PIOB->PIO_ODSR & (1 << (io - 32)); | ||
break; | ||
} | ||
return status; | ||
} | ||
|
||
void load_sernum_ethaddr(void) | ||
{ | ||
return; | ||
} | ||
|
||
/* | ||
* Miscelaneous platform dependent initialisations | ||
*/ | ||
DECLARE_GLOBAL_DATA_PTR; | ||
|
||
int board_init(void) | ||
{ | ||
/* Enable Ctrlc */ | ||
console_init_f(); | ||
|
||
/* Correct IRDA resistor problem */ | ||
/* Set PA23_TXD in Output */ | ||
((AT91PS_PIO)AT91C_BASE_PIOA)->PIO_OER = AT91C_PA23_TXD2; | ||
|
||
/* memory and cpu-speed are setup before relocation */ | ||
/* so we do _nothing_ here */ | ||
gd->bd->bi_arch_number = MACH_TYPE_M501; | ||
/* adress of boot parameters */ | ||
gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; | ||
m501sk_gpio_init(); | ||
|
||
/* Do interrupt init here, because flash needs timers */ | ||
interrupt_init(); | ||
flash_init(); | ||
|
||
return 0; | ||
} | ||
|
||
int dram_init(void) | ||
{ | ||
int i = 0; | ||
gd->bd->bi_dram[0].start = PHYS_SDRAM; | ||
gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE; | ||
|
||
for (i = 0; i < 500; i++) { | ||
m501sk_gpio_clear(M501SK_DEBUG_LED3); | ||
m501sk_gpio_clear(M501SK_BUZZER); | ||
udelay(250); | ||
m501sk_gpio_set(M501SK_DEBUG_LED3); | ||
m501sk_gpio_set(M501SK_BUZZER); | ||
udelay(80); | ||
} | ||
m501sk_gpio_clear(M501SK_BUZZER); | ||
m501sk_gpio_clear(M501SK_DEBUG_LED3); | ||
|
||
return 0; | ||
} | ||
|
||
int board_late_init(void) | ||
{ | ||
#if defined(CONFIG_CMD_NET) | ||
eth_init(gd->bd); | ||
eth_halt(); | ||
#endif | ||
|
||
/* Protect U-Boot, kernel & ramdisk memory addresses */ | ||
run_command("protect on 10000000 1041ffff", 0); | ||
return 0; | ||
} | ||
|
||
#ifdef CONFIG_DRIVER_ETHER | ||
#if defined(CONFIG_CMD_NET) | ||
/* | ||
* Name: | ||
* at91rm9200_GetPhyInterface | ||
* Description: | ||
* Initialise the interface functions to the PHY | ||
* Arguments: | ||
* None | ||
* Return value: | ||
* None | ||
*/ | ||
void at91rm9200_GetPhyInterface(AT91PS_PhyOps p_phyops) | ||
{ | ||
p_phyops->Init = dm9161_InitPhy; | ||
p_phyops->IsPhyConnected = dm9161_IsPhyConnected; | ||
p_phyops->GetLinkSpeed = dm9161_GetLinkSpeed; | ||
p_phyops->AutoNegotiate = dm9161_AutoNegotiate; | ||
} | ||
#endif /* CONFIG_CMD_NET */ | ||
#endif /* CONFIG_DRIVER_ETHER */ | ||
#endif /* CONFIG_M501SK */ |
Oops, something went wrong.