Hi Kerry, Le Tuesday 22 June 2010 02:32:45, Kerry Lynn a écrit : > Greetings, > > After years of benefiting from other developers' labors (thanks!) > I think I finally have a contribution. However, I'd like to get some > feedback from the community before posting the patch. > > I've been looking into the timer issues on the Asus routers as > documented, for example, in https://dev.openwrt.org/ticket/4083 > and https://forum.openwrt.org/viewtopic.php?pid=107594. > > As noted by others, these models appear to be underclocked > at 200MHz instead of the 240MHz that appears in comments. > This is pretty easy to verify: if you set the time using 'date' and > then read it back, you'll see that these routers lose 10 sec every > minute. I ran a test over a 24 hour period and the router lost > exactly four hours (a 16.66% error). > > This problem can be remedied on the above-mentioned Asus > models with the following patch for 2.6: > > --- > a/build_dir/linux-brcm47xx/linux-2.6.32.10/drivers/ssb/driver_mipscore.c > +++ > b/build_dir/linux-brcm47xx/linux-2.6.32.10/drivers/ssb/driver_mipscore.c > @@ -218,7 +218,7 @@ > if ((pll_type == SSB_PLLTYPE_5) || (bus->chip_id == 0x5365)) { > rate = 200000000; > } else if (bus->chip_id == 0x5354) { > - rate = 240000000; > + rate = 200000000; > } else { > rate = ssb_calc_clock_rate(pll_type, n, m); > } > --- a/build_dir/linux-brcm47xx/linux-2.6.32.10/drivers/ssb/main.c > +++ b/build_dir/linux-brcm47xx/linux-2.6.32.10/drivers/ssb/main.c > @@ -1105,7 +1105,7 @@ > if (bus->chip_id == 0x5365) { > rate = 100000000; > } else if (bus->chip_id == 0x5354) { > - rate = 120000000; > + rate = 100000000; > } else { > rate = ssb_calc_clock_rate(plltype, clkctl_n, clkctl_m); > if (plltype == SSB_PLLTYPE_3) /* 25Mhz, 2 dividers */ > > and the following patch for 2.4: > > --- a/build_dir/linux-brcm-2.4/linux-2.4.37.9/arch/mips/bcm947xx/sbmips.c > +++ b/build_dir/linux-brcm-2.4/linux-2.4.37.9/arch/mips/bcm947xx/sbmips.c > @@ -284,7 +284,7 @@ > } else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) { > /* 5354 chip uses a non programmable PLL of frequency > 240MHz */ > if (sb_chip(sbh) == BCM5354_CHIP_ID) { > - rate = 240000000; > + rate = 200000000; > goto out; > } > pll_type = R_REG(osh, &cc->capabilities) & CC_CAP_PLL_MASK; > --- a/build_dir/linux-brcm-2.4/linux-2.4.37.9/arch/mips/bcm947xx/hndpmu.c > +++ b/build_dir/linux-brcm-2.4/linux-2.4.37.9/arch/mips/bcm947xx/hndpmu.c > @@ -710,7 +710,7 @@ > if (sb_chip (sbh) == BCM5354_CHIP_ID) > { > /* 5354 gets sb clock of 100MHz from main pll */ > - return 120000000; > + return 100000000; > } > > /* Find the xtal frequency in the table */ > > > I have a few concerns. First, if these Asus models are underclocked but > there are other routers out there that aren't, then these mods should be > applied by platform+model and I don't know how to do that.
Exactly, that's why the patch should be more specific and check for a blacklist of models or ideally, a specific chipco version for instance. For instance, the WL-520-GC does not seem to have that issue, though it's a WL-520 GU without USB basically (at least CFE says the CPU freq is 240Mhz). > > Second, I know some changes were made to the usb system to improve its > reliability but I wonder if there may be an interaction between my > changes and the usb changes? I.e. did they compensate for a 16.66% > error in jiffies that is now corrected by my patch? No idea about that. > > Lastly, there's a patch file in 2.6 (220-bcm5354.patch) that applies the > incorrect timer values. If my changes are accepted, they should really > go into this file. Is it OK to submit a patch to a .patch file? Yes this is ok, and this is actually how we would integrate it. -- Florian _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel