Le Wednesday 24 June 2009 14:23:47 Ralf Baechle, vous avez écrit : > On Wed, Jun 24, 2009 at 12:28:56PM +0100, Alexander Clouter wrote: > > Florian Fainelli <florian@xxxxxxxxxxx> wrote: > > > Le Tuesday 23 June 2009 20:15:09 Ralf Baechle, vous avez écrit : > > >> On Tue, Jun 23, 2009 at 11:28:27AM +0200, Florian Fainelli wrote: > > >> > > >> AR7 time again - the platform pending longest ... Let's see: > > > > > > Thank you very much for your comments Ralf, please find below an > > > updated version which addresses all of your comments. I hope this time > > > we are going to make it ;) > > > > I am hoping someone can have a tackle of the lzma/bzip2 kernel/initramfs > > generic compression code myself, but I guess one thing at a time. :) If > > you have a simple way for me to produce a LZMA'd image, I'll test it > > this on my WAG54Gv2 (I need the image to be less than 700kB). > > > > My comments, for what they are worth, below: > > > From: Florian Fainelli <florian@xxxxxxxxxxx> > > > Subject: Add support for Texas Instruments AR7 System-on-a-Chip > > > > > > This patch adds support for the Texas Instruments AR7 System-on-a-Chip. > > > It supports the TNETD7100, 7200 and 7300 versions of the SoC. > > > > > > Changes from v4: > > > [snipped] > > > > > > Signed-off-by: Matteo Croce <matteo@xxxxxxxxxxx> > > > Signed-off-by: Felix Fietkau <nbd@xxxxxxxxxxx> > > > Signed-off-by: Eugene Konev <ejka@xxxxxxxxxxx> > > > Signed-off-by: Nicolas Thill <nico@xxxxxxxxxxx> > > > Signed-off-by: Florian Fainelli <florian@xxxxxxxxxxx> > > > -- > > > [snipped] > > > > > > diff --git a/arch/mips/ar7/clock.c b/arch/mips/ar7/clock.c > > > new file mode 100644 > > > index 0000000..7ce5f07 > > > --- /dev/null > > > +++ b/arch/mips/ar7/clock.c > > > @@ -0,0 +1,450 @@ > > > [snipped] > > > +static void __init tnetd7300_init_clocks(void) > > > +{ > > > + u32 *bootcr = (u32 *)ioremap_nocache(AR7_REGS_DCL, 4); > > > + struct tnetd7300_clocks *clocks = > > > + (struct tnetd7300_clocks *) > > > + ioremap_nocache(AR7_REGS_POWER > > > + 0x20, + sizeof(struct > > > tnetd7300_clocks)); + > > > > Needless cast'ing and also should you not check that NULL is not > > returned for both of these ioremap's? > > That's because we "know" it can't ever fail for addresses < 0x20000000. > Downside - sparse will bitch about it. > > But yes, the cast indeed is unnecessary. Incremental patch on top of the one you already have below. -- From: Florian Fainelli <florian@xxxxxxxxxxx> Subject: clean up AR7 code This patch cleans up the code and is incremental to version 5 of patch previously sent which adds AR7 support. - uneeded casts on ioremaps in clock.c - define AR7_REGS_CLOCKS/UR8_REGS_CLOCKS for consistency - remove useless nops and use busy-waiting on the pll status register - remove commented out usb clock setting for TNETD7300 - simplify ar7_init_clocks - return -ENXIO for unknown chips in ar7_has_high_cpmac - remove forward declarations of functions in setup.c Signed-off-by: Florian Fainelli <florian@xxxxxxxxxxx> -- diff --git a/arch/mips/ar7/clock.c b/arch/mips/ar7/clock.c index 7ce5f07..b8c7c84 100644 --- a/arch/mips/ar7/clock.c +++ b/arch/mips/ar7/clock.c @@ -244,8 +244,7 @@ static void __init tnetd7300_init_clocks(void) { u32 *bootcr = (u32 *)ioremap_nocache(AR7_REGS_DCL, 4); struct tnetd7300_clocks *clocks = - (struct tnetd7300_clocks *) - ioremap_nocache(AR7_REGS_POWER + 0x20, + ioremap_nocache(UR8_REGS_CLOCKS, sizeof(struct tnetd7300_clocks)); ar7_bus_clock = tnetd7300_get_clock(BUS_PLL_SOURCE_SHIFT, @@ -256,10 +255,7 @@ static void __init tnetd7300_init_clocks(void) &clocks->cpu, bootcr, AR7_AFE_CLOCK); else ar7_cpu_clock = ar7_bus_clock; -/* - tnetd7300_set_clock(USB_PLL_SOURCE_SHIFT, &clocks->usb, - bootcr, 48000000); -*/ + if (ar7_dsp_clock == 250000000) tnetd7300_set_clock(DSP_PLL_SOURCE_SHIFT, &clocks->dsp, bootcr, ar7_dsp_clock); @@ -293,9 +289,6 @@ static void tnetd7200_set_clock(int base, struct tnetd7200_clock *clock, writel(DIVISOR_ENABLE_MASK | ((prediv - 1) & 0x1F), &clock->prediv); writel((mul - 1) & 0xF, &clock->mul); - for (mul = 0; mul < 2000; mul++) - ; /* nop */ - while (readl(&clock->status) & 0x1) ; /* nop */ @@ -348,8 +341,7 @@ static void __init tnetd7200_init_clocks(void) { u32 *bootcr = (u32 *)ioremap_nocache(AR7_REGS_DCL, 4); struct tnetd7200_clocks *clocks = - (struct tnetd7200_clocks *) - ioremap_nocache(AR7_REGS_POWER + 0x80, + ioremap_nocache(AR7_REGS_CLOCKS, sizeof(struct tnetd7200_clocks)); int cpu_base, cpu_mul, cpu_prediv, cpu_postdiv; int dsp_base, dsp_mul, dsp_prediv, dsp_postdiv; @@ -432,8 +424,6 @@ int __init ar7_init_clocks(void) { switch (ar7_chip_id()) { case AR7_CHIP_7100: - tnetd7200_init_clocks(); - break; case AR7_CHIP_7200: tnetd7200_init_clocks(); break; diff --git a/arch/mips/ar7/setup.c b/arch/mips/ar7/setup.c index cccb484..6ebb5f1 100644 --- a/arch/mips/ar7/setup.c +++ b/arch/mips/ar7/setup.c @@ -25,10 +25,6 @@ #include <asm/mach-ar7/ar7.h> #include <asm/mach-ar7/prom.h> -static void ar7_machine_restart(char *command); -static void ar7_machine_halt(void); -static void ar7_machine_power_off(void); - static void ar7_machine_restart(char *command) { u32 *softres_reg = ioremap(AR7_REGS_RESET + diff --git a/arch/mips/include/asm/mach-ar7/ar7.h b/arch/mips/include/asm/mach-ar7/ar7.h index 4ebe2c6..de71694 100644 --- a/arch/mips/include/asm/mach-ar7/ar7.h +++ b/arch/mips/include/asm/mach-ar7/ar7.h @@ -21,8 +21,10 @@ #define __AR7_H__ #include <linux/delay.h> -#include <asm/addrspace.h> #include <linux/io.h> +#include <linux/errno.h> + +#include <asm/addrspace.h> #define AR7_SDRAM_BASE 0x14000000 @@ -32,6 +34,8 @@ #define AR7_REGS_GPIO (AR7_REGS_BASE + 0x0900) /* 0x08610A00 - 0x08610BFF (512 bytes, 128 bytes / clock) */ #define AR7_REGS_POWER (AR7_REGS_BASE + 0x0a00) +#define AR7_REGS_CLOCKS (AR7_REGS_POWER + 0x80) +#define UR8_REGS_CLOCKS (AR7_REGS_POWER + 0x20) #define AR7_REGS_UART0 (AR7_REGS_BASE + 0x0e00) #define AR7_REGS_USB (AR7_REGS_BASE + 0x1200) #define AR7_REGS_RESET (AR7_REGS_BASE + 0x1600) @@ -126,8 +130,10 @@ static inline int ar7_has_high_cpmac(void) case AR7_CHIP_7100: case AR7_CHIP_7200: return 0; - default: + case AR7_CHIP_7300: return 1; + default: + return -ENXIO; } } #define ar7_has_high_vlynq ar7_has_high_cpmac