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

Reply via email to