vlan0ports=5 vlan1ports=0 1 2 3 4 5* i have zipped nvram, original firmware boot process and complete flash image in case you might find it useful
http://www25.zippyshare.com/v/34134998/file.html On 1 June 2013 10:32, Hauke Mehrtens <ha...@hauke-m.de> wrote: > On 06/01/2013 04:11 PM, Tomislav Požega wrote: > > these patches are slight modification of Fiach Antaw's original > > gs2_support.diff he used to successfully port GlobeSurfer 2 > > > > i have changed boardtype and boardrev variables to the ones of > globesurfer3. > > Your patch is whitespace damaged, the tabs are replaced with white > spaces. Please follow https://dev.openwrt.org/wiki/SubmittingPatches > > Could you base your patch only on kernel 3.8, I will not do any changes > for kernel 3.6 any more. > > > Index: target/linux/brcm47xx/image/lzma-loader/src/decompress.c > > =================================================================== > > --- target/linux/brcm47xx/image/lzma-loader/src/decompress.c > > (revision 35832) > > +++ target/linux/brcm47xx/image/lzma-loader/src/decompress.c (working > > copy) > > @@ -90,6 +90,9 @@ > > #define EDIMAX_PS_HEADER_MAGIC 0x36315350 /* "PS16" */ > > #define EDIMAX_PS_HEADER_LEN 0xc /* 12 bytes long for edimax header > */ > > > > +#define OPENRG_HEADER_MAGIC 0xBEBAEDFE /* 'FEEDBABE' */ > > +#define OPENRG_HEADER_LEN 0x94 > > + > > /* beyound the image end, size not known in advance */ > > extern unsigned char workspace[]; > > > > @@ -139,11 +142,14 @@ > > /* look for trx header, 32-bit data access */ > > for (data = ((unsigned char *) KSEG1ADDR(BCM4710_FLASH)); > > ((struct trx_header *)data)->magic != TRX_MAGIC && > > - ((struct trx_header *)data)->magic != EDIMAX_PS_HEADER_MAGIC; > > + ((struct trx_header *)data)->magic != EDIMAX_PS_HEADER_MAGIC && > > + ((struct trx_header *)data)->magic != OPENRG_HEADER_MAGIC; > > data += 65536); > > > > if (((struct trx_header *)data)->magic == EDIMAX_PS_HEADER_MAGIC) > > data += EDIMAX_PS_HEADER_LEN; > > + if (((struct trx_header *)data)->magic == OPENRG_HEADER_MAGIC) > > + data += OPENRG_HEADER_LEN; > > /* compressed kernel is in the partition 0 or 1 */ > > if (((struct trx_header *)data)->offsets[1] > 65536) > > data += ((struct trx_header *)data)->offsets[0]; > > Index: target/linux/brcm47xx/base-files/etc/init.d/netconfig > > =================================================================== > > --- target/linux/brcm47xx/base-files/etc/init.d/netconfig (revision > > 35832) > > +++ target/linux/brcm47xx/base-files/etc/init.d/netconfig (working > copy) > > @@ -225,6 +225,12 @@ > > c["vlan1ports"] = "" > > c["vlan2ports"] = "" > > } > > + if (model == "Option GlobeSurfer III") { > > + c["lan_ifname"] = "eth0.1" > > + c["wan_ifname"] = "" > > + c["vlan1ports"] = "0 1 2 3 4 5u" > > + c["vlan2ports"] = "" > > + } > > I would more like a generic detection of this switch configuration. > Could you please post your nvram values for vlan{0,1,2}ports. When these > values are containing correct values we could do a generic detection. > > > if (c["vlan1ports"] || c["vlan2ports"]) { > > print "#### VLAN configuration " > > Index: > > > target/linux/brcm47xx/patches-3.6/260-MIPS-BCM47XX-add-board-detection.patch > > =================================================================== > > --- > > > target/linux/brcm47xx/patches-3.6/260-MIPS-BCM47XX-add-board-detection.patch > > (revision 35832) > > +++ > > > target/linux/brcm47xx/patches-3.6/260-MIPS-BCM47XX-add-board-detection.patch > > (working copy) > > @@ -8,7 +8,7 @@ > > obj-$(CONFIG_BCM47XX_SSB) += wgt634u.o > > --- /dev/null > > +++ b/arch/mips/bcm47xx/board.c > > -@@ -0,0 +1,223 @@ > > +@@ -0,0 +1,236 @@ > > +#include <linux/export.h> > > +#include <linux/string.h> > > +#include <bcm47xx_board.h> > > @@ -127,6 +127,11 @@ > > + { {0}, 0}, > > +}; > > + > > ++static const struct bcm47xx_board_type_list > > bcm47xx_board_list_board_type_rev[] = { > > ++ {{BCM47XX_BOARD_OPTION_GS3, "Option GlobeSurfer III"}, > > "0x048e","0x10"}, > > ++ { {0}, 0}, > > ++}; > > ++ > > +static const struct bcm47xx_board_type bcm47xx_board_unknown[] = { > > + {BCM47XX_BOARD_UNKNOWN, "Unknown Board"}, > > +}; > > @@ -200,6 +205,14 @@ > > + return &e->board; > > + } > > + } > > ++ > > ++ if (bcm47xx_nvram_getenv("boardtype", buf1, sizeof(buf1)) >= 0 && > > ++ bcm47xx_nvram_getenv("boardrev", buf2, sizeof(buf2)) >= 0) { > > ++ for (e = bcm47xx_board_list_board_type_rev; e->value1; e++) { > > ++ if (!strcmp(buf1, e->value1) && !strcmp(buf2, e->value2)) > > ++ return &e->board; > > ++ } > > ++ } > > + return bcm47xx_board_unknown; > > +} > > + > > @@ -234,7 +247,7 @@ > > +EXPORT_SYMBOL(bcm47xx_board_get_name); > > --- /dev/null > > +++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_board.h > > -@@ -0,0 +1,91 @@ > > +@@ -0,0 +1,93 @@ > > +#ifndef __BCM47XX_BOARD_H > > +#define __BCM47XX_BOARD_H > > + > > @@ -315,6 +328,8 @@ > > + BCM47XX_BOARD_NETGEAR_WNR3500V2VC, > > + BCM47XX_BOARD_NETGEAR_WNR834BV2, > > + > > ++ BCM47XX_BOARD_OPTION_GS3, > > ++ > > + /* TODO */ > > + BCM47XX_BOARD_SIMPLETECH_SIMPLESHARE, > > + > > Index: > > target/linux/brcm47xx/patches-3.6/050-mtd-add-bcm47xx-part-parser.patch > > =================================================================== > > --- > > target/linux/brcm47xx/patches-3.6/050-mtd-add-bcm47xx-part-parser.patch > > (revision 35832) > > +++ > > target/linux/brcm47xx/patches-3.6/050-mtd-add-bcm47xx-part-parser.patch > > (working copy) > > @@ -26,7 +26,7 @@ > > obj-$(CONFIG_MTD_CHAR) += mtdchar.o > > --- /dev/null > > +++ b/drivers/mtd/bcm47xxpart.c > > -@@ -0,0 +1,504 @@ > > +@@ -0,0 +1,560 @@ > > +/* > > + * Copyright (C) 2006 Felix Fietkau <n...@openwrt.org > > <mailto:n...@openwrt.org>> > > + * Copyright (C) 2005 Waldemar Brodkorb <w...@openwrt.org > > <mailto:w...@openwrt.org>> > > @@ -106,6 +106,24 @@ > > +#define EDIMAX_PS_HEADER_MAGIC 0x36315350 /* "PS16" */ > > +#define EDIMAX_PS_HEADER_LEN 0xc /* 12 bytes long for edimax header > */ > > + > > ++/* similarly, OpenRG-based boards use additional headers > > ++ * as part of their flash partitioning scheme, > > ++ * which unfortunately include a checksum and length field > > ++ */ > > ++ > > ++/* Note: All fields are in big-endian */ > > ++struct openrg_header { > > ++ u32 magic; /* 0xFEEDBABE */ > > ++ u32 len; /* Length of file excluding header */ > > ++ u32 checksum; /* 32-bit sum of all bytes in file and header, > > excluding checksum */ > > ++ u32 counter; /* Unknown */ > > ++ u32 start_offset; /* Unknown */ > > ++ u8 name[0x80]; /* Names the file for the CFE flash_layout command > */ > > ++}; > > ++ > > ++#define OPENRG_HEADER_MAGIC be32_to_cpu(0xFEEDBABE) > > ++#define OPENRG_HEADER_LEN sizeof(struct openrg_header) > > ++ > > +#define NVRAM_SPACE 0x8000 > > + > > +static int > > @@ -140,6 +158,13 @@ > > + } else { > > + pr_notice("Found edimax header\n"); > > + } > > ++ } else if (le32_to_cpu(trx->magic) == OPENRG_HEADER_MAGIC) { > > ++ if (mtd_read(mtd, off + OPENRG_HEADER_LEN, > > ++ sizeof(buf), &len, buf) || len != sizeof(buf)) { > > ++ continue; > > ++ } else { > > ++ pr_notice("Found OpenRG header\n"); > > ++ } > > + } > > + > > + /* found a TRX header */ > > @@ -259,11 +284,12 @@ > > +find_root(struct mtd_info *mtd, struct mtd_partition *part) > > +{ > > + struct trx_header trx, *trx2; > > ++ struct openrg_header *org; > > + unsigned char buf[512], *block; > > + int off, blocksize, trxoff = 0; > > -+ u32 i, crc = ~0; > > ++ u32 i, j, sum = 0, crc = ~0; > > + size_t len; > > -+ bool edimax = false; > > ++ bool openrg = false; > > + > > + blocksize = mtd->erasesize; > > + if (blocksize < 0x10000) > > @@ -279,7 +305,7 @@ > > + len != sizeof(trx)) > > + continue; > > + > > -+ /* found an edimax header */ > > ++ /* found an edimax/OpenRG header */ > > + if (le32_to_cpu(trx.magic) == EDIMAX_PS_HEADER_MAGIC) { > > + /* read the correct trx header */ > > + if (mtd_read(mtd, off + EDIMAX_PS_HEADER_LEN, > > @@ -288,8 +314,19 @@ > > + continue; > > + } else { > > + pr_notice("Found an edimax ps header\n"); > > -+ edimax = true; > > ++ trxoff = EDIMAX_PS_HEADER_LEN; > > + } > > ++ } else if (le32_to_cpu(trx.magic) == OPENRG_HEADER_MAGIC) { > > ++ /* read the correct trx header */ > > ++ if (mtd_read(mtd, off + OPENRG_HEADER_LEN, > > ++ sizeof(trx), &len, (char *) &trx) || > > ++ len != sizeof(trx)) { > > ++ continue; > > ++ } else { > > ++ pr_notice("Found an OpenRG header\n"); > > ++ openrg = true; > > ++ trxoff = OPENRG_HEADER_LEN; > > ++ } > > + } > > + > > + /* found a TRX header */ > > @@ -299,11 +336,8 @@ > > + part->size = le32_to_cpu(trx.len); > > + > > + part->size -= part->offset; > > ++ off += trxoff; > > + part->offset += off; > > -+ if (edimax) { > > -+ off += EDIMAX_PS_HEADER_LEN; > > -+ trxoff = EDIMAX_PS_HEADER_LEN; > > -+ } > > + > > + goto found; > > + } > > @@ -333,6 +367,13 @@ > > + if (mtd_read(mtd, off + i, sizeof(buf), &len, buf) || len > > != sizeof(buf)) > > + return 0; > > + crc = crc32_le(crc, buf, min(sizeof(buf), trx.len - i)); > > ++ > > ++ /* Also generate the openrg header checksum if needed */ > > ++ if (openrg) { > > ++ for (j = 0; j < min(sizeof(buf), trx.len - i); j++) { > > ++ sum += buf[j]; > > ++ } > > ++ } > > + } > > + trx.crc32 = crc; > > + > > @@ -350,6 +391,21 @@ > > + > > + /* Write updated trx header to the flash */ > > + memcpy(block + trxoff, &trx, sizeof(trx)); > > ++ > > ++ /* fix OpenRG length and checksum */ > > ++ if (openrg) { > > ++ pr_notice("Fixing OpenRG header.\n"); > > ++ org = (struct openrg_header *)block; > > ++ org->len = cpu_to_be32(trx.len); > > ++ org->checksum = 0; > > ++ > > ++ /* Update the openrg checksum with TRX and openrg header > > values */ > > ++ for (i = 0; i < OPENRG_HEADER_LEN + (u32)&(((struct > > trx_header *)NULL)->flag_version); i++) { > > ++ sum += block[i]; > > ++ } > > ++ org->checksum = cpu_to_be32(sum); > > ++ } > > ++ > > + if (mtd->_unlock) > > + mtd->_unlock(mtd, off - trxoff, mtd->erasesize); > > + erase_write(mtd, off - trxoff, mtd->erasesize, block); > > These changes are missing for kernel 3.8. > > > Index: > > > target/linux/brcm47xx/patches-3.8/260-MIPS-BCM47XX-add-board-detection.patch > > =================================================================== > > --- > > > target/linux/brcm47xx/patches-3.8/260-MIPS-BCM47XX-add-board-detection.patch > > (revision 35832) > > +++ > > > target/linux/brcm47xx/patches-3.8/260-MIPS-BCM47XX-add-board-detection.patch > > (working copy) > > @@ -127,6 +127,11 @@ > > + { {0}, 0}, > > +}; > > + > > ++static const struct bcm47xx_board_type_list > > bcm47xx_board_list_boardtype_rev[] = { > > ++ {{BCM47XX_BOARD_OPTION_GS3, "Option GlobeSurfer III"}, "0x048e", > > "0x10"}, > > ++ { {0}, 0}, > > ++}; > > ++ > > +static const struct bcm47xx_board_type bcm47xx_board_unknown[] = { > > + {BCM47XX_BOARD_UNKNOWN, "Unknown Board"}, > > +}; > > @@ -200,6 +205,14 @@ > > + return &e->board; > > + } > > + } > > ++ > > ++ if (bcm47xx_nvram_getenv("boardtype", buf1, sizeof(buf1)) >= 0 && > > ++ bcm47xx_nvram_getenv("bootrev", buf2, sizeof(buf2)) >= 0) { > > ++ for (e = bcm47xx_board_list_boardtype_rev; e->value1; e++) { > > ++ if (!strcmp(buf1, e->value1) && !strcmp(buf2, e->value2)) > > ++ return &e->board; > > ++ } > > ++ } > > + return bcm47xx_board_unknown; > > +} > > + > > @@ -315,6 +328,8 @@ > > + BCM47XX_BOARD_NETGEAR_WNR3500V2VC, > > + BCM47XX_BOARD_NETGEAR_WNR834BV2, > > + > > ++ BCM47XX_BOARD_OPTION_GS3, > > ++ > > + /* TODO */ > > + BCM47XX_BOARD_SIMPLETECH_SIMPLESHARE, > > + > > Index: package/broadcom-diag/src/diag.c > > =================================================================== > > --- package/broadcom-diag/src/diag.c (revision 35832) > > +++ package/broadcom-diag/src/diag.c (working copy) > > @@ -154,6 +154,9 @@ > > > > /* Edimax */ > > PS1208MFG, > > + > > + /* Option */ > > + GS3, > > }; > > > > static void __init bcm4780_init(void) { > > @@ -194,6 +197,19 @@ > > bcm47xx_gpio_out(pin, pin); > > } > > > > +static void __init option_gs3_init(void) { > > + /* unset pin 7 (disables LCD) */ > > + int pin = 1 << 7; > > + bcm47xx_gpio_outen(pin, pin); > > + bcm47xx_gpio_control(pin, 0); > > + bcm47xx_gpio_out(pin, 0); > > + /* unset pin 9 (enables 3G modem) */ > > + pin = 1 << 9; > > + bcm47xx_gpio_outen(pin, pin); > > + bcm47xx_gpio_control(pin, 0); > > + bcm47xx_gpio_out(pin, 0); > > +} > > + > > static struct platform_t __initdata platforms[] = { > > /* Linksys */ > > [WAP54GV1] = { > > @@ -1090,6 +1106,26 @@ > > { .name = "wlan", .gpio = 1 << 0, .polarity = NORMAL }, > > }, > > }, > > + /* Option */ > > + [GS3] = { > > + .name = "Option GlobeSurfer III", > > + .buttons = { > > + /* The power button latches/toggles, but apparently doesn't > > do so mechanically */ > > + { .name = "power", .gpio = 1 << 12 }, > > + { .name = "display", .gpio = 1 << 14 }, > > + { .name = "umts", .gpio = 1 << 15 }, > > + /* So far I haven't been able to figure out how the reset > > button works */ > > + }, > > + .leds = { > > + /* There are no LEDs on this device */ > > + }, > > + /* Also of note: > > + * GPIO 7 enables/disables the LCD > > + * GPIO 9 enables/disables the modem > > + * We use a custom init routine to enable the modem and (for > > now) disable the LCD. > > + */ > > + .platform_init = option_gs3_init, > > + }, > > }; > > > > static struct platform_t __init *platform_detect_legacy(void) > > @@ -1333,6 +1369,8 @@ > > return &platforms[WNDR3400V1]; > > case BCM47XX_BOARD_NETGEAR_WNDR3700V3: > > return &platforms[WNDR3700V3]; > > + case BCM47XX_BOARD_OPTION_GS3: > > + return &platforms[GS3]; > > case BCM47XX_BOARD_UNKNOWN: > > case BCM47XX_BOARD_NON: > > printk(MODULE_NAME ": unknown board found, try legacy > detect\n"); > > > > > > > > _______________________________________________ > > openwrt-devel mailing list > > openwrt-devel@lists.openwrt.org > > https://lists.openwrt.org/mailman/listinfo/openwrt-devel > > > >
_______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel