mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	Add support for Kernel 2.6.39. Boots fine on a BCM6358. Signed-off-by: Jonas Gorski <jonas.gorski+openwrt@gmail.com> SVN-Revision: 27019
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 | |
| +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
 | |
| @@ -32,9 +32,13 @@
 | |
|  #include <bcm63xx_dev_usb_udc.h>
 | |
|  #include <bcm63xx_dev_spi.h>
 | |
|  #include <board_bcm963xx.h>
 | |
| +#include <bcm_tag.h>
 | |
|  
 | |
|  #define PFX	"board_bcm963xx: "
 | |
|  
 | |
| +#define CFE_OFFSET_64K		0x10000
 | |
| +#define CFE_OFFSET_128K		0x20000
 | |
| +
 | |
|  static struct bcm963xx_nvram nvram;
 | |
|  static unsigned int mac_addr_used;
 | |
|  static struct board_info board;
 | |
| @@ -723,6 +727,29 @@ static int board_get_mac_address(u8 *mac
 | |
|  	return 0;
 | |
|  }
 | |
|  
 | |
| +static void __init boardid_fixup(u8 *boot_addr)
 | |
| +{
 | |
| +	struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
 | |
| +
 | |
| +	/* check if bcm_tag is at 64k offset */
 | |
| +	if (strncmp(nvram.name, tag->boardid, BOARDID_LEN) != 0) {
 | |
| +		/* else try 128k */
 | |
| +		tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_128K);
 | |
| +		if (strncmp(nvram.name, tag->boardid, BOARDID_LEN) != 0) {
 | |
| +			/* No tag found */
 | |
| +			printk(KERN_DEBUG "No bcm_tag found!\n");
 | |
| +			return;
 | |
| +		}
 | |
| +	}
 | |
| +	/* check if we should override the boardid */
 | |
| +	if (tag->information1[0] != '+')
 | |
| +		return;
 | |
| +
 | |
| +	strncpy(nvram.name, &tag->information1[1], BOARDID_LEN);
 | |
| +
 | |
| +	printk(KERN_INFO "Overriding boardid with '%s'\n", nvram.name);
 | |
| +}
 | |
| +
 | |
|  /*
 | |
|   * early init callback, read nvram data from flash and checksum it
 | |
|   */
 | |
| @@ -771,6 +798,11 @@ void __init board_prom_init(void)
 | |
|  		return;
 | |
|  	}
 | |
|  
 | |
| +	if (strcmp(cfe_version, "unknown") != 0) {
 | |
| +		/* cfe present */
 | |
| +		boardid_fixup(boot_addr);
 | |
| +	}
 | |
| +
 | |
|  	/* find board by name */
 | |
|  	for (i = 0; i < ARRAY_SIZE(bcm963xx_boards); i++) {
 | |
|  		if (strncmp(nvram.name, bcm963xx_boards[i]->name,
 |