diff options
| -rw-r--r-- | firmware/microblaze/apps/txrx_uhd.c | 12 | ||||
| -rw-r--r-- | firmware/microblaze/lib/eeprom.c | 12 | ||||
| -rw-r--r-- | firmware/microblaze/lib/eth_addrs.c | 21 | ||||
| -rw-r--r-- | firmware/microblaze/lib/ethernet.h | 6 | ||||
| -rw-r--r-- | firmware/microblaze/lib/i2c.h | 3 | ||||
| -rw-r--r-- | firmware/microblaze/usrp2p/Makefile.am | 3 | ||||
| -rw-r--r-- | firmware/microblaze/usrp2p/bootloader/init_bootloader.c | 23 | 
7 files changed, 59 insertions, 21 deletions
diff --git a/firmware/microblaze/apps/txrx_uhd.c b/firmware/microblaze/apps/txrx_uhd.c index d00f2bc1f..c7163b6bf 100644 --- a/firmware/microblaze/apps/txrx_uhd.c +++ b/firmware/microblaze/apps/txrx_uhd.c @@ -497,6 +497,16 @@ main(void)  {    u2_init(); +//we do this to see if we should set a default ip addr or not +#ifdef USRP2P +  bool safe_fw = find_safe_booted_flag(); +  set_safe_booted_flag(0); +  if(safe_fw) { +    set_default_ip_addr(); +    set_default_mac_addr(); +  } +#endif +    putstr("\nTxRx-NEWETH\n");    print_mac_addr(ethernet_mac_addr()->addr);    newline(); @@ -507,7 +517,7 @@ main(void)    //1) register the addresses into the network stack    register_mac_addr(ethernet_mac_addr());    register_ip_addr(get_ip_addr()); - +      //2) register callbacks for udp ports we service    register_udp_listener(USRP2_UDP_CTRL_PORT, handle_udp_ctrl_packet);    register_udp_listener(USRP2_UDP_DATA_PORT, handle_udp_data_packet); diff --git a/firmware/microblaze/lib/eeprom.c b/firmware/microblaze/lib/eeprom.c index b12ffe082..d4e170046 100644 --- a/firmware/microblaze/lib/eeprom.c +++ b/firmware/microblaze/lib/eeprom.c @@ -17,9 +17,21 @@  #include "i2c.h"  #include "mdelay.h" +#include "usrp2/fw_common.h"  static const int EEPROM_PAGESIZE = 16; +bool find_safe_booted_flag(void) { +	unsigned char flag_byte; +	eeprom_read(USRP2_I2C_ADDR_MBOARD, USRP2_EE_MBOARD_BOOTLOADER_FLAGS, &flag_byte, 1); +	return (flag_byte == 0x5E); +} + +void set_safe_booted_flag(bool flag) { +	unsigned char flag_byte = flag ? 0x5E : 0xDC; +	eeprom_write(USRP2_I2C_ADDR_MBOARD, USRP2_EE_MBOARD_BOOTLOADER_FLAGS, &flag_byte, 1); +} +  bool  eeprom_write (int i2c_addr, int eeprom_offset, const void *buf, int len)  { diff --git a/firmware/microblaze/lib/eth_addrs.c b/firmware/microblaze/lib/eth_addrs.c index c6320e4fa..ff5d04f4d 100644 --- a/firmware/microblaze/lib/eth_addrs.c +++ b/firmware/microblaze/lib/eth_addrs.c @@ -46,9 +46,20 @@ unprogrammed(const void *t, size_t len)  //////////////////// MAC Addr Stuff ///////////////////////  static int8_t src_mac_addr_initialized = false; + +static const eth_mac_addr_t default_mac_addr = {{ +    0x00, 0x50, 0xC2, 0x85, 0x3f, 0xff +  }}; +  static eth_mac_addr_t src_mac_addr = {{      0x00, 0x50, 0xC2, 0x85, 0x3f, 0xff    }}; +   +void set_default_mac_addr(void) +{ +    src_mac_addr_initialized = true; +    src_mac_addr = default_mac_addr; +}  const eth_mac_addr_t *  ethernet_mac_addr(void) @@ -88,10 +99,20 @@ ethernet_set_mac_addr(const eth_mac_addr_t *t)  //////////////////// IP Addr Stuff ///////////////////////  static int8_t src_ip_addr_initialized = false; + +static const struct ip_addr default_ip_addr = { +    (192 << 24 | 168 << 16 | 10 << 8 | 2 << 0) +}; +  static struct ip_addr src_ip_addr = {      (192 << 24 | 168 << 16 | 10 << 8 | 2 << 0)  }; +void set_default_ip_addr(void) +{ +    src_ip_addr_initialized = true; +    src_ip_addr = default_ip_addr; +}  const struct ip_addr *get_ip_addr(void)  { diff --git a/firmware/microblaze/lib/ethernet.h b/firmware/microblaze/lib/ethernet.h index 8c6d8b567..52b297349 100644 --- a/firmware/microblaze/lib/ethernet.h +++ b/firmware/microblaze/lib/ethernet.h @@ -44,6 +44,9 @@ void ethernet_register_link_changed_callback(ethernet_link_changed_callback_t cb   */  const eth_mac_addr_t *ethernet_mac_addr(void); +/*!set mac addr to default*/ +void set_default_mac_addr(void); +  /*!   * \brief write mac address to eeprom and begin using it   */ @@ -54,6 +57,9 @@ bool ethernet_set_mac_addr(const eth_mac_addr_t *t);   */  const struct ip_addr *get_ip_addr(void); +/*!set ip addr to default*/ +void set_default_ip_addr(void); +  /*!   * \brief write ip address to eeprom and begin using it   */ diff --git a/firmware/microblaze/lib/i2c.h b/firmware/microblaze/lib/i2c.h index 6ff0e6982..1af4d72df 100644 --- a/firmware/microblaze/lib/i2c.h +++ b/firmware/microblaze/lib/i2c.h @@ -33,4 +33,7 @@ bool eeprom_write (int i2c_addr, int eeprom_offset, const void *buf, int len);  bool eeprom_read (int i2c_addr, int eeprom_offset, void *buf, int len); +bool find_safe_booted_flag(void); +void set_safe_booted_flag(bool flag); +  #endif /* INCLUDED_I2C_H */ diff --git a/firmware/microblaze/usrp2p/Makefile.am b/firmware/microblaze/usrp2p/Makefile.am index a5df3ff08..40766b406 100644 --- a/firmware/microblaze/usrp2p/Makefile.am +++ b/firmware/microblaze/usrp2p/Makefile.am @@ -18,7 +18,8 @@  include $(top_srcdir)/Makefile.common  AM_CFLAGS = \ -	$(COMMON_CFLAGS) +	$(COMMON_CFLAGS) \ +	-DUSRP2P  AM_LDFLAGS = \  	$(COMMON_LFLAGS) \ diff --git a/firmware/microblaze/usrp2p/bootloader/init_bootloader.c b/firmware/microblaze/usrp2p/bootloader/init_bootloader.c index 2bbbd405e..1d9d681d7 100644 --- a/firmware/microblaze/usrp2p/bootloader/init_bootloader.c +++ b/firmware/microblaze/usrp2p/bootloader/init_bootloader.c @@ -18,9 +18,6 @@  #include <i2c.h>  #include "usrp2/fw_common.h" -bool find_safe_booted_flag(void); -void set_safe_booted_flag(bool flag); -  void pic_interrupt_handler() __attribute__ ((interrupt_handler));  void pic_interrupt_handler() @@ -28,18 +25,6 @@ void pic_interrupt_handler()    // nop stub  } -bool find_safe_booted_flag(void) { -	unsigned char flag_byte; -	eeprom_read(USRP2_I2C_ADDR_MBOARD, USRP2_EE_MBOARD_BOOTLOADER_FLAGS, &flag_byte, 1); -	return (flag_byte == 0x5E); -} - -void set_safe_booted_flag(bool flag) { -	unsigned char flag_byte = flag ? 0x5E : 0xDC; -	eeprom_write(USRP2_I2C_ADDR_MBOARD, USRP2_EE_MBOARD_BOOTLOADER_FLAGS, &flag_byte, 1); -} - -  void load_ihex(void) { //simple IHEX parser to load proper records into RAM. loads program when it receives end of record.  	char buf[128]; //input data buffer  	uint8_t ihx[32]; //ihex data buffer @@ -79,22 +64,22 @@ int main(int argc, char *argv[]) {  	puts("USRP2+ bootloader\n");  	bool production_image = find_safe_booted_flag(); -	if(production_image) set_safe_booted_flag(0); //we're the production image, so we clear the flag for the next boot - +	set_safe_booted_flag(0); //haven't booted yet +	  	if(BUTTON_PUSHED) { //see memory_map.h  		puts("Starting USRP2+ in safe mode.");  		if(is_valid_fw_image(SAFE_FW_IMAGE_LOCATION_ADDR)) { +				set_safe_booted_flag(1); //let the firmware know it's the safe image  				spi_flash_read(SAFE_FW_IMAGE_LOCATION_ADDR, FW_IMAGE_SIZE_BYTES, (void *)RAM_BASE);  				start_program(RAM_BASE);  				puts("ERROR: return from main program! This should never happen!");  				icap_reload_fpga(SAFE_FPGA_IMAGE_LOCATION_ADDR);  			} else {  				puts("ERROR: no safe firmware image available. I am a brick. Feel free to load IHEX to RAM."); -				//puts("ERROR: no safe firmware image available. I am a brick.");  				load_ihex();  			}  	} - +	  	if(!production_image) {  		puts("Checking for valid production FPGA image...");  		if(is_valid_fpga_image(PROD_FPGA_IMAGE_LOCATION_ADDR)) {  | 
