Changeset 388 for trunk/softs
- Timestamp:
- May 16, 2013, 3:01:37 PM (12 years ago)
- Location:
- trunk/softs/tsar_boot
- Files:
-
- 1 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/softs/tsar_boot/Makefile
r368 r388 1 ifndef PLATFORM_DIR 2 $(error please define PLATFORM_DIR 'make PLATFORM_DIR=foo') 3 else 1 ifndef MAKECMDGOALS 2 MAKECMDGOALS=none 3 endif 4 5 ifneq ($(MAKECMDGOALS),$(filter $(MAKECMDGOALS),clean distclean clean-doc doc)) 6 ifndef PLATFORM_DIR 7 $(error please define PLATFORM_DIR 'make PLATFORM_DIR=foo') 8 else 9 ifdef SOCLIB 10 DEFS+= -DSOCLIB_IOC 11 DTS=platform_soclib.dts 12 $(info Making for $(PLATFORM_DIR), SocLib variant) 13 else 14 DTS=platform_fpga.dts 15 $(info Making for $(PLATFORM_DIR), FPGA variant) 16 endif 17 endif 18 endif 4 19 5 20 LD := mipsel-unknown-elf-ld … … 12 27 DTC := dtc 13 28 HEXDUMP := hexdump 29 DOXYGEN := doxygen 14 30 15 31 BUILD_DIR := build … … 50 66 TARGET := bin.soft 51 67 52 ifdef SOCLIB53 54 DEFS+= -DSOCLIB_IOC55 DTS=platform_soclib.dts56 $(info Making for $(PLATFORM_DIR), SocLib variant)57 58 else59 60 DTS=platform_fpga.dts61 $(info Making for $(PLATFORM_DIR), FPGA variant)62 63 endif64 68 65 69 ifdef SYSCLK_FREQ 66 DEFS+= -DSYSCLK_FREQ 70 DEFS+= -DSYSCLK_FREQ=$(SYSCLK_FREQ) 67 71 endif 68 69 72 70 73 all: $(TARGET) 71 74 72 75 $(TARGET): $(BUILD_DIR) $(OBJS) $(PLATFORM_DIR)/ldscript $(BUILD_DIR)/platform.ld 73 $(ECHO) "[ LD ] $@"76 $(ECHO) "[ LD ] $@" 74 77 $(LD) -o $@ -T $(PLATFORM_DIR)/ldscript $(OBJS) 75 78 $(DU) -D $@ > $@.txt 76 79 77 80 $(BUILD_DIR)/platform.ld: $(BUILD_DIR)/platform.dtb 81 $(ECHO) "[ HEXDUMP ] $(notdir $<)" 78 82 $(HEXDUMP) -v -e '"BYTE(0x" 1/1 "%02X" ")\n"' $< > $@ 79 83 80 84 $(BUILD_DIR)/platform.dtb: $(DTS) 81 ${DTC} -O dtb -o $@ $< 85 $(ECHO) "[ DTC ] $(notdir $<)" 86 touch $@;#${DTC} -O dtb -o $@ $< &> /dev/null 82 87 83 88 $(BUILD_DIR): 84 89 $(MKDIR) $@ 85 90 91 doc: Doxyfile 92 $(DOXYGEN) Doxyfile 93 86 94 clean: 87 95 $(RM) $(TARGET).txt $(TARGET) *~ $(BUILD_DIR) 88 96 89 distclean: clean 97 clean-doc: 98 $(RM) doc 99 100 distclean: clean clean-doc 90 101 91 102 # ============================================================================= … … 93 104 94 105 $(BUILD_DIR)/%.o: %.c 95 $(ECHO) "[ CC ] $(notdir $<)"106 $(ECHO) "[ CC ] $(notdir $<)" 96 107 $(CC) $(DEFS) $(CFLAGS) $(INCLUDE) -c -o $@ $< 97 108 $(DU) -D $@ > $@.txt 98 109 99 110 $(BUILD_DIR)/%.o: %.S 100 $(ECHO) "[ AS ] $(notdir $<)"111 $(ECHO) "[ AS ] $(notdir $<)" 101 112 $(CC) $(DEFS) ${INCLUDE} -g -mips32 -c -o $@ $< 102 113 $(DU) -D $@ > $@.txt 103 114 104 115 .SILENT: 105 endif -
trunk/softs/tsar_boot/README.txt
r347 r388 8 8 include/ Header files 9 9 10 conf/ Platform specific files and ldscript .10 conf/ Platform specific files and ldscript examples. 11 11 For each platform, we must define a new directory. 12 12 … … 38 38 39 39 ---> platform_fpga.dts: 40 40 41 Device tree file. It is mandatory if compiling 41 42 for a FPGA platform. If the application to execute does not use … … 43 44 44 45 ---> ldscript: 46 45 47 LD script defining the segments of this boot loader. 46 48 We define two segments: … … 54 56 Arguments to pass: 55 57 56 ---> PLATFORM_DIR= conf/<platform_dir>58 ---> PLATFORM_DIR=<platform_dir> 57 59 58 60 Defines the directory where to find the plateform specific -
trunk/softs/tsar_boot/conf/platform_fpga_de2-115/defs_platform.h
r347 r388 7 7 #define CACHE_LINE_SIZE 64//bytes 8 8 9 #define INSTRUMENTATION 0 10 9 11 #define IOC_BASE 0xFB000000 10 12 #define VCIBD_BASE 0xFB000000 -
trunk/softs/tsar_boot/include/boot_ioc.h
r347 r388 3 3 4 4 #ifndef SOCLIB_IOC 5 6 5 #include <sdcard.h> 6 #include <spi.h> 7 7 #else 8 8 #include <block_device.h> 9 9 #endif 10 10 -
trunk/softs/tsar_boot/include/spi.h
r292 r388 98 98 void spi_dev_config ( 99 99 struct spi_dev * spi, 100 int spi_freq 101 int sys_freq 102 int char_len 103 int tx_edge 104 int rx_edge 100 int spi_freq , 101 int sys_freq , 102 int char_len , 103 int tx_edge , 104 int rx_edge ); 105 105 106 106 /** … … 121 121 #define SPI_RXTX_MASK ( 0xFF ) /**< Mask for the an RX/TX value */ 122 122 123 124 * \param x :Initialized pointer to the SPI controller125 126 127 128 *Check the GO_BUSY bit of the SPI Controller129 123 /** 124 * \param x : Initialized pointer to the SPI controller 125 * 126 * \return 1 if there is an unfinished transfer in the SPI controller 127 * 128 * \brief Check the GO_BUSY bit of the SPI Controller 129 */ 130 130 #define SPI_IS_BUSY(x) ((ioread32(&x->ctrl) & SPI_CTRL_GO_BSY) != 0) ? 1 : 0 131 131 -
trunk/softs/tsar_boot/src/boot_elf_loader.c
r292 r388 73 73 { 74 74 boot_puts ( 75 76 77 78 75 "ERROR: " 76 "IOC_FAILED" 77 "\n" 78 ); 79 79 80 80 boot_exit(); 81 81 } 82 82 83 83 nb_block += 1; 84 84 nb_available = 512; … … 102 102 nb_rest = elf_header_ptr->e_phnum * elf_header_ptr->e_phentsize; 103 103 104 105 106 107 108 109 110 111 112 113 114 115 ); 116 117 118 119 120 121 122 123 124 104 /* Verification of ELF Magic Number */ 105 if ( 106 (elf_header_ptr->e_ident[EI_MAG0] != ELFMAG0) || 107 (elf_header_ptr->e_ident[EI_MAG1] != ELFMAG1) || 108 (elf_header_ptr->e_ident[EI_MAG2] != ELFMAG2) || 109 (elf_header_ptr->e_ident[EI_MAG3] != ELFMAG3) ) 110 { 111 boot_puts( 112 "ERROR: " 113 "Input file does not use ELF format" 114 "\n" 115 ); 116 117 boot_exit(); 118 } 119 120 /* 121 * Verification of Program Headers table size. It must be 122 * smaller than the work size allocated for the 123 * elf_pht[PHDR_ARRAY_SIZE] array 124 **/ 125 125 if (elf_header_ptr->e_phnum > PHDR_ARRAY_SIZE) 126 126 { 127 127 boot_puts( 128 129 130 131 132 128 "ERROR: " 129 "ELF PHDR table size is bigger than " 130 "the allocated work space" 131 "\n" 132 ); 133 133 134 134 boot_exit(); … … 257 257 258 258 boot_puts ( 259 260 261 259 "Finishing boot_elf_loader function.\n" 260 "Entry point address: " 261 ); 262 262 boot_putx(elf_header_ptr->e_entry); 263 263 boot_puts("\n"); -
trunk/softs/tsar_boot/src/boot_ioc.c
r347 r388 2 2 3 3 #ifndef SOCLIB_IOC 4 5 static struct sdcard_dev _sdcard_device; 6 static struct spi_dev * _spi_device = ( struct spi_dev * )IOC_BASE; 4 7 5 8 #ifndef SYSCLK_FREQ 6 9 #warning "Using default value for SYSCLK_FREQ = 50000000" 7 10 #define SYSCLK_FREQ 50000000U 8 #endif 9 10 static struct sdcard_dev _sdcard_device; 11 static struct spi_dev * _spi_device = ( struct spi_dev * )IOC_BASE; 12 #endif 13 14 11 #endif // end ifndef SYSCLK_FREQ 12 13 #endif // end ifndef SOCLIB_IOC 14 15 #define SDCARD_RESET_ITER_MAX 4 16 17 inline void boot_sleep(int cycles) 18 { 19 int i; 20 for (i = 0; i < cycles; i++); 21 } 22 23 #if INSTRUMENTATION 24 inline unsigned int boot_proctime() 25 { 26 unsigned int ret; 27 asm volatile ("mfc0 %0, $9":"=r" (ret)); 28 return ret; 29 } 30 #endif // end if INSTRUMENTATION 31 32 #ifndef SOCLIB_IOC 15 33 int boot_ioc_init() 16 34 { 17 #ifdef SOCLIB_IOC18 return 0;19 #else20 35 unsigned char sdcard_rsp; 21 36 … … 37 52 * Initializing the SD Card 38 53 */ 39 if ( (sdcard_rsp = sdcard_dev_open(&_sdcard_device, _spi_device, 0)) ) 40 return sdcard_rsp; 41 42 if ( (sdcard_rsp = sdcard_dev_set_blocklen(&_sdcard_device, 512)) ) 43 return sdcard_rsp; 54 unsigned int iter = 0; 55 while(1) 56 { 57 boot_puts("Trying to initialize SD card... "); 58 59 sdcard_rsp = sdcard_dev_open(&_sdcard_device, _spi_device, 0); 60 if (sdcard_rsp == 0) 61 { 62 boot_puts("OK\n"); 63 break; 64 } 65 66 boot_puts("KO\n"); 67 boot_sleep(1000); 68 if (++iter >= SDCARD_RESET_ITER_MAX) 69 { 70 boot_puts("\nERROR: During SD card reset to IDLE state\n" 71 "/ card response = "); 72 boot_putx(sdcard_rsp); 73 boot_puts("\n"); 74 boot_exit(); 75 } 76 } 77 78 /** 79 * Set the block length of the SD Card 80 */ 81 sdcard_rsp = sdcard_dev_set_blocklen(&_sdcard_device, 512); 82 if (sdcard_rsp) 83 { 84 boot_puts("ERROR: During SD card blocklen initialization\n"); 85 boot_exit(); 86 } 44 87 45 88 /** … … 48 91 spi_dev_config ( 49 92 _spi_device , 50 10000000 , /**< SPI_clk L10 Mhz */51 SYSCLK_FREQ , /**< Sys_clk 52 -1 , /**< Charlen: 8 93 10000000 , /**< SPI_clk 10 Mhz */ 94 SYSCLK_FREQ , /**< Sys_clk */ 95 -1 , /**< Charlen: 8 */ 53 96 -1 , 54 97 -1 … … 58 101 59 102 return 0; 60 #endif 61 } 103 } 104 #endif // end ifndef SOCLIB_IOC 62 105 63 106 /** … … 137 180 138 181 #else 182 139 183 /////////////////////////////////////////////////////////////////////////////// 140 184 // FPGA version of the boot_ioc_read function … … 143 187 { 144 188 unsigned int sdcard_rsp; 189 unsigned int i; 145 190 146 191 sdcard_dev_lseek(&_sdcard_device, lba); 147 192 148 unsigned int i; 193 #if INSTRUMENTATION 194 unsigned int start_time; 195 unsigned int end_time; 196 boot_puts("[ DEBUG ] Reading blocks "); 197 boot_putd(lba); 198 boot_puts(" to "); 199 boot_putd(lba + count - 1); 200 201 start_time = boot_proctime(); 202 #endif 203 149 204 for(i = 0; i < count; i++) 150 205 { … … 161 216 162 217 return 1; 163 } 164 } 218 } 219 } 220 221 #if INSTRUMENTATION 222 end_time = boot_proctime(); 223 224 boot_puts(" / cycles for transfert: "); 225 boot_putd(end_time - start_time); 226 boot_puts("\n"); 227 #endif 165 228 166 229 return 0; -
trunk/softs/tsar_boot/src/exceptions.c
r292 r388 4 4 * \author : Manuel Bouyer 5 5 * 6 * This file defines a simple ex eptions handler6 * This file defines a simple exceptions handler 7 7 */ 8 8 -
trunk/softs/tsar_boot/src/sdcard.c
r292 r388 43 43 static void _sdcard_gen_tick(struct sdcard_dev * sdcard, unsigned int tick_count) 44 44 { 45 volatileregister int i = 0;45 register int i = 0; 46 46 while(i++ < tick_count) spi_put_tx(sdcard->spi, 0xFF, 0); 47 47 } … … 213 213 214 214 for (i = 0; i < 4; i++) 215 { 215 216 args[i] = (sdcard->access_pointer >> (32 - (i+1)*8)) & 0xFF; 217 } 216 218 217 219 _sdcard_enable(sdcard); -
trunk/softs/tsar_boot/src/spi.c
r292 r388 1 /* 1 /** 2 2 * \file spi.c 3 * \dat a31 August 20123 * \date 31 August 2012 4 4 * \author Cesar Fuguet <cesar.fuguet-tortolero@lip6.fr> 5 5 */ … … 15 15 static void _spi_wait_if_busy(struct spi_dev * spi) 16 16 { 17 volatileregister int delay;17 register int delay; 18 18 19 19 while(SPI_IS_BUSY(spi)) 20 20 { 21 for (delay = 0; delay < 100 00; delay++);21 for (delay = 0; delay < 100; delay++); 22 22 } 23 23 } … … 58 58 iowrite8(&spi->rx_tx[index % 4], byte); 59 59 _spi_init_transfer(spi); 60 61 asm volatile("sync");62 60 } 63 61 _spi_wait_if_busy(spi); … … 104 102 if (spi_freq > 0 && sys_freq > 0) 105 103 iowrite32(&spi->divider, _spi_calc_divider_value(spi_freq, sys_freq)); 106 107 104 } 108 105
Note: See TracChangeset
for help on using the changeset viewer.