Fix the bounce_size global so that the bounce buffer works with CBFS.
Make self_boot() static. Signed-off-by: Myles Watson <mylesgw@gmail.com> Acked-by: Ronald G. Minnich <rminnich@gmail.com> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4663 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
		@@ -68,7 +68,7 @@ int elf_check_arch(Elf_ehdr *ehdr)
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void jmp_to_elf_entry(void *entry, unsigned long buffer, unsigned long bounce_size)
 | 
					void jmp_to_elf_entry(void *entry, unsigned long buffer, unsigned long size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	extern unsigned char _ram_seg, _eram_seg;
 | 
						extern unsigned char _ram_seg, _eram_seg;
 | 
				
			||||||
	unsigned long lb_start, lb_size;
 | 
						unsigned long lb_start, lb_size;
 | 
				
			||||||
@@ -79,7 +79,7 @@ void jmp_to_elf_entry(void *entry, unsigned long buffer, unsigned long bounce_si
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	lb_start = (unsigned long)&_ram_seg;
 | 
						lb_start = (unsigned long)&_ram_seg;
 | 
				
			||||||
	lb_size = (unsigned long)(&_eram_seg - &_ram_seg);
 | 
						lb_size = (unsigned long)(&_eram_seg - &_ram_seg);
 | 
				
			||||||
	adjust = buffer + bounce_size - lb_start;
 | 
						adjust = buffer +  size - lb_start;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	adjusted_boot_notes = (unsigned long)&elf_boot_notes;
 | 
						adjusted_boot_notes = (unsigned long)&elf_boot_notes;
 | 
				
			||||||
	adjusted_boot_notes += adjust; 
 | 
						adjusted_boot_notes += adjust; 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,9 +71,10 @@ struct ip_checksum_vcb {
 | 
				
			|||||||
	unsigned short ip_checksum;
 | 
						unsigned short ip_checksum;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int selfboot(struct lb_memory *mem, struct cbfs_payload *payload);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void * cbfs_load_payload(struct lb_memory *lb_mem, const char *name)
 | 
					void * cbfs_load_payload(struct lb_memory *lb_mem, const char *name)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int selfboot(struct lb_memory *mem, struct cbfs_payload *payload);
 | 
					 | 
				
			||||||
	struct cbfs_payload *payload;
 | 
						struct cbfs_payload *payload;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	payload = (struct cbfs_payload *)cbfs_find_file(name, CBFS_TYPE_PAYLOAD);
 | 
						payload = (struct cbfs_payload *)cbfs_find_file(name, CBFS_TYPE_PAYLOAD);
 | 
				
			||||||
@@ -110,7 +111,7 @@ void * cbfs_load_payload(struct lb_memory *lb_mem, const char *name)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static unsigned long bounce_size, bounce_buffer;
 | 
					static unsigned long bounce_size, bounce_buffer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void get_bounce_buffer(struct lb_memory *mem, unsigned long bounce_size)
 | 
					static void get_bounce_buffer(struct lb_memory *mem, unsigned long req_size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned long lb_size;
 | 
						unsigned long lb_size;
 | 
				
			||||||
	unsigned long mem_entries;
 | 
						unsigned long mem_entries;
 | 
				
			||||||
@@ -118,7 +119,7 @@ static void get_bounce_buffer(struct lb_memory *mem, unsigned long bounce_size)
 | 
				
			|||||||
	int i;
 | 
						int i;
 | 
				
			||||||
	lb_size = (unsigned long)(&_eram_seg - &_ram_seg);
 | 
						lb_size = (unsigned long)(&_eram_seg - &_ram_seg);
 | 
				
			||||||
	/* Double coreboot size so I have somewhere to place a copy to return to */
 | 
						/* Double coreboot size so I have somewhere to place a copy to return to */
 | 
				
			||||||
	lb_size = bounce_size + lb_size;
 | 
						lb_size = req_size + lb_size;
 | 
				
			||||||
	mem_entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
 | 
						mem_entries = (mem->size - sizeof(*mem))/sizeof(mem->map[0]);
 | 
				
			||||||
	buffer = 0;
 | 
						buffer = 0;
 | 
				
			||||||
	for(i = 0; i < mem_entries; i++) {
 | 
						for(i = 0; i < mem_entries; i++) {
 | 
				
			||||||
@@ -142,6 +143,7 @@ static void get_bounce_buffer(struct lb_memory *mem, unsigned long bounce_size)
 | 
				
			|||||||
		buffer = tbuffer;
 | 
							buffer = tbuffer;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	bounce_buffer = buffer;
 | 
						bounce_buffer = buffer;
 | 
				
			||||||
 | 
						bounce_size = req_size;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int valid_area(struct lb_memory *mem, unsigned long buffer,
 | 
					static int valid_area(struct lb_memory *mem, unsigned long buffer,
 | 
				
			||||||
@@ -424,7 +426,8 @@ static int load_self_segments(
 | 
				
			|||||||
	for(ptr = head->next; ptr != head; ptr = ptr->next) {
 | 
						for(ptr = head->next; ptr != head; ptr = ptr->next) {
 | 
				
			||||||
		if (!overlaps_coreboot(ptr)) continue;
 | 
							if (!overlaps_coreboot(ptr)) continue;
 | 
				
			||||||
		unsigned long bounce = ptr->s_dstaddr + ptr->s_memsz - lb_start;
 | 
							unsigned long bounce = ptr->s_dstaddr + ptr->s_memsz - lb_start;
 | 
				
			||||||
		if (bounce > required_bounce_size) required_bounce_size = bounce;
 | 
							if (bounce > required_bounce_size)
 | 
				
			||||||
 | 
								required_bounce_size = bounce;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	get_bounce_buffer(mem, required_bounce_size);
 | 
						get_bounce_buffer(mem, required_bounce_size);
 | 
				
			||||||
	if (!bounce_buffer) {
 | 
						if (!bounce_buffer) {
 | 
				
			||||||
@@ -458,14 +461,12 @@ static int load_self_segments(
 | 
				
			|||||||
			size_t len;
 | 
								size_t len;
 | 
				
			||||||
			len = ptr->s_filesz;
 | 
								len = ptr->s_filesz;
 | 
				
			||||||
			switch(ptr->compression) {
 | 
								switch(ptr->compression) {
 | 
				
			||||||
#if CONFIG_COMPRESSED_PAYLOAD_LZMA==1
 | 
					 | 
				
			||||||
				case CBFS_COMPRESS_LZMA: {
 | 
									case CBFS_COMPRESS_LZMA: {
 | 
				
			||||||
					printk_debug("using LZMA\n");
 | 
										printk_debug("using LZMA\n");
 | 
				
			||||||
					unsigned long ulzma(unsigned char *src, unsigned char *dst);		
 | 
										unsigned long ulzma(unsigned char *src, unsigned char *dst);		
 | 
				
			||||||
					len = ulzma(src, dest);
 | 
										len = ulzma(src, dest);
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#if CONFIG_COMPRESSED_PAYLOAD_NRV2B==1
 | 
					#if CONFIG_COMPRESSED_PAYLOAD_NRV2B==1
 | 
				
			||||||
				case CBFS_COMPRESS_NRV2B: {
 | 
									case CBFS_COMPRESS_NRV2B: {
 | 
				
			||||||
					printk_debug("using NRV2B\n");
 | 
										printk_debug("using NRV2B\n");
 | 
				
			||||||
@@ -505,7 +506,7 @@ static int load_self_segments(
 | 
				
			|||||||
	return 1;
 | 
						return 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int selfboot(struct lb_memory *mem, struct cbfs_payload *payload)
 | 
					static int selfboot(struct lb_memory *mem, struct cbfs_payload *payload)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u32 entry=0;
 | 
						u32 entry=0;
 | 
				
			||||||
	struct segment head;
 | 
						struct segment head;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user