Re: [PATCH 5/8] add Texas Instruments AR7 support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux