Patchwork [U-Boot,AT91,rework,v2] change common at91sam9261 files after AT91 rework

login
register
mail settings
Submitter Asen Dimov
Date July 18, 2011, 5:04 p.m.
Message ID <1311008656-28387-1-git-send-email-dimov@ronetix.at>
Download mbox | patch
Permalink /patch/105334/
State Superseded
Delegated to: Reinhard Meyer
Headers show

Comments

Asen Dimov - July 18, 2011, 5:04 p.m.
Signed-off-by: Asen Dimov <dimov@ronetix.at>
---
Note:
This patch was a part of patches, but it is better to be done step by step and
so this patch is a split from the patch series with message id:
<1307606409-29818-2-git-send-email-dimov@ronetix.at>
and Patchwork:
http://patchwork.ozlabs.org/patch/99665/

Changes for v2:
	- add CONFIG_AT91_GPIO_PIULLUP
	- reneme at91_serial3_hw_init() to at91_seriald_hw_init()
	- remove at91_serial_hw_init()


 arch/arm/cpu/arm926ejs/at91/at91sam9261_devices.c |   62 ++++++++++-----------
 arch/arm/include/asm/arch-at91/at91sam9261.h      |    1 +
 2 files changed, 30 insertions(+), 33 deletions(-)
Reinhard Meyer - July 26, 2011, 7:14 a.m.
Dear Asen Dimov,
> Signed-off-by: Asen Dimov <dimov@ronetix.at>
> ---
> Note:
> This patch was a part of patches, but it is better to be done step by step and
> so this patch is a split from the patch series with message id:
> <1307606409-29818-2-git-send-email-dimov@ronetix.at>
> and Patchwork:
> http://patchwork.ozlabs.org/patch/99665/
> 
> Changes for v2:
> 	- add CONFIG_AT91_GPIO_PIULLUP
> 	- reneme at91_serial3_hw_init() to at91_seriald_hw_init()
> 	- remove at91_serial_hw_init()

What I miss in at91sam9261_devices.c (as compared to the 9260)
is support for MACB and MCI. Don't 9261 systems use Ethernet?
Or is that part still in the board specific files?

Then, I would like to add the following changes:

-------------- arch/arm/cpu/arm926ejs/at91/at91sam9261_devices.c 
@@ -79,14 +79,14 @@ void at91_seriald_hw_init(void)
 	writel(1 << ATMEL_ID_SYS, &pmc->pcer);
 }
 
-#ifdef CONFIG_HAS_DATAFLASH
+#if defined(CONFIG_HAS_DATAFLASH) || defined(CONFIG_ATMEL_SPI)
 void at91_spi0_hw_init(unsigned long cs_mask)
 {
 	at91_pmc_t	*pmc	= (at91_pmc_t *) ATMEL_BASE_PMC;
 
-	at91_set_a_periph(AT91_PIO_PORTA, 0, 0);	/* SPI0_MISO */
-	at91_set_a_periph(AT91_PIO_PORTA, 1, 0);	/* SPI0_MOSI */
-	at91_set_a_periph(AT91_PIO_PORTA, 2, 0);	/* SPI0_SPCK */
+	at91_set_a_periph(AT91_PIO_PORTA, 0, PUP);	/* SPI0_MISO */
+	at91_set_a_periph(AT91_PIO_PORTA, 1, PUP);	/* SPI0_MOSI */
+	at91_set_a_periph(AT91_PIO_PORTA, 2, PUP);	/* SPI0_SPCK */
 
 	/* Enable clock */
 	writel(1 << ATMEL_ID_SPI0, &pmc->pcer);
@@ -121,9 +121,9 @@ void at91_spi1_hw_init(unsigned long cs_mask)
 {
 	at91_pmc_t	*pmc	= (at91_pmc_t *) ATMEL_BASE_PMC;
 
-	at91_set_a_periph(AT91_PIO_PORTB, 30, 0);	/* SPI1_MISO */
-	at91_set_a_periph(AT91_PIO_PORTB, 31, 0);	/* SPI1_MOSI */
-	at91_set_a_periph(AT91_PIO_PORTB, 29, 0);	/* SPI1_SPCK */
+	at91_set_a_periph(AT91_PIO_PORTB, 30, PUP);	/* SPI1_MISO */
+	at91_set_a_periph(AT91_PIO_PORTB, 31, PUP);	/* SPI1_MOSI */
+	at91_set_a_periph(AT91_PIO_PORTB, 29, PUP);	/* SPI1_SPCK */
 
 	/* Enable clock */
 	writel(1 << ATMEL_ID_SPI1, &pmc->pcer);

----------------- arch/arm/include/asm/arch-at91/at91sam9261.h 
@@ -104,7 +104,7 @@
 #define ATMEL_SIZE_SRAM		0x00028000	/* Internal SRAM size (160Kb) */
 
 #define ATMEL_BASE_ROM		0x00400000	/* Internal ROM base address */
-#define ATMEL_SIZE_ROM		SZ_32K		/* Internal ROM size (32Kb) */
+#define ATMEL_SIZE_ROM		0x00008000	/* Internal ROM size (32Kb) */
 
 #define ATMEL_BASE_UHP		0x00500000	/* USB Host controller */
 #define ATMEL_BASE_LCDC		0x00600000	/* LDC controller */

I have this as a local patch and could squash this onto yours, or
you may provide an updated patch.

Thanks,
Reinhard
Asen Dimov - July 26, 2011, 9:11 a.m.
Hello Reinhard,

On 07/26/2011 10:14 AM, Reinhard Meyer wrote:
> Dear Asen Dimov,
>> Signed-off-by: Asen Dimov<dimov@ronetix.at>
>> ---
>> Note:
>> This patch was a part of patches, but it is better to be done step by step and
>> so this patch is a split from the patch series with message id:
>> <1307606409-29818-2-git-send-email-dimov@ronetix.at>
>> and Patchwork:
>> http://patchwork.ozlabs.org/patch/99665/
>>
>> Changes for v2:
>> 	- add CONFIG_AT91_GPIO_PIULLUP
>> 	- reneme at91_serial3_hw_init() to at91_seriald_hw_init()
>> 	- remove at91_serial_hw_init()
> What I miss in at91sam9261_devices.c (as compared to the 9260)
> is support for MACB and MCI. Don't 9261 systems use Ethernet?
> Or is that part still in the board specific files?
>
> Then, I would like to add the following changes:
>
> -------------- arch/arm/cpu/arm926ejs/at91/at91sam9261_devices.c
> @@ -79,14 +79,14 @@ void at91_seriald_hw_init(void)
>   	writel(1<<  ATMEL_ID_SYS,&pmc->pcer);
>   }
>
> -#ifdef CONFIG_HAS_DATAFLASH
> +#if defined(CONFIG_HAS_DATAFLASH) || defined(CONFIG_ATMEL_SPI)
>   void at91_spi0_hw_init(unsigned long cs_mask)
>   {
>   	at91_pmc_t	*pmc	= (at91_pmc_t *) ATMEL_BASE_PMC;
>
> -	at91_set_a_periph(AT91_PIO_PORTA, 0, 0);	/* SPI0_MISO */
> -	at91_set_a_periph(AT91_PIO_PORTA, 1, 0);	/* SPI0_MOSI */
> -	at91_set_a_periph(AT91_PIO_PORTA, 2, 0);	/* SPI0_SPCK */
> +	at91_set_a_periph(AT91_PIO_PORTA, 0, PUP);	/* SPI0_MISO */
> +	at91_set_a_periph(AT91_PIO_PORTA, 1, PUP);	/* SPI0_MOSI */
> +	at91_set_a_periph(AT91_PIO_PORTA, 2, PUP);	/* SPI0_SPCK */
>
>   	/* Enable clock */
>   	writel(1<<  ATMEL_ID_SPI0,&pmc->pcer);
> @@ -121,9 +121,9 @@ void at91_spi1_hw_init(unsigned long cs_mask)
>   {
>   	at91_pmc_t	*pmc	= (at91_pmc_t *) ATMEL_BASE_PMC;
>
> -	at91_set_a_periph(AT91_PIO_PORTB, 30, 0);	/* SPI1_MISO */
> -	at91_set_a_periph(AT91_PIO_PORTB, 31, 0);	/* SPI1_MOSI */
> -	at91_set_a_periph(AT91_PIO_PORTB, 29, 0);	/* SPI1_SPCK */
> +	at91_set_a_periph(AT91_PIO_PORTB, 30, PUP);	/* SPI1_MISO */
> +	at91_set_a_periph(AT91_PIO_PORTB, 31, PUP);	/* SPI1_MOSI */
> +	at91_set_a_periph(AT91_PIO_PORTB, 29, PUP);	/* SPI1_SPCK */
>
>   	/* Enable clock */
>   	writel(1<<  ATMEL_ID_SPI1,&pmc->pcer);
>
> ----------------- arch/arm/include/asm/arch-at91/at91sam9261.h
> @@ -104,7 +104,7 @@
>   #define ATMEL_SIZE_SRAM		0x00028000	/* Internal SRAM size (160Kb) */
>
>   #define ATMEL_BASE_ROM		0x00400000	/* Internal ROM base address */
> -#define ATMEL_SIZE_ROM		SZ_32K		/* Internal ROM size (32Kb) */
> +#define ATMEL_SIZE_ROM		0x00008000	/* Internal ROM size (32Kb) */
>
>   #define ATMEL_BASE_UHP		0x00500000	/* USB Host controller */
>   #define ATMEL_BASE_LCDC		0x00600000	/* LDC controller */
>
> I have this as a local patch and could squash this onto yours, or
> you may provide an updated patch.
I will try once more to make it as it should be.
> Thanks,
> Reinhard

Regards,
Asen
Asen Dimov - July 26, 2011, 9:19 a.m.
and one forgotten answer ...

On 07/26/2011 12:11 PM, RONETIX - Asen Dimov wrote:
> Hello Reinhard,
>
> On 07/26/2011 10:14 AM, Reinhard Meyer wrote:
>> Dear Asen Dimov,
>>> Signed-off-by: Asen Dimov<dimov@ronetix.at>
>>> ---
>>> Note:
>>> This patch was a part of patches, but it is better to be done step 
>>> by step and
>>> so this patch is a split from the patch series with message id:
>>> <1307606409-29818-2-git-send-email-dimov@ronetix.at>
>>> and Patchwork:
>>> http://patchwork.ozlabs.org/patch/99665/
>>>
>>> Changes for v2:
>>>     - add CONFIG_AT91_GPIO_PIULLUP
>>>     - reneme at91_serial3_hw_init() to at91_seriald_hw_init()
>>>     - remove at91_serial_hw_init()
>> What I miss in at91sam9261_devices.c (as compared to the 9260)
>> is support for MACB and MCI. Don't 9261 systems use Ethernet?
>> Or is that part still in the board specific files?
>>
that part is in the board file.

[snip]
> Regards,
> Asen
Reinhard Meyer - July 26, 2011, 9:34 a.m.
Dear Asen Dimov,
> and one forgotten answer ...
> >> What I miss in at91sam9261_devices.c (as compared to the 9260)
> >> is support for MACB and MCI. Don't 9261 systems use Ethernet?
> >> Or is that part still in the board specific files?
> >>
> that part is in the board file.

That is unfortunate. I'd like to move that into the SoC specific file.
Otherwise that code would be duplicated in each board.

Best Regards,
Reinhard
Reinhard Meyer - July 26, 2011, 9:50 a.m.
Dear Asen Dimov,
> and one forgotten answer ...
> >> What I miss in at91sam9261_devices.c (as compared to the 9260)
> >> is support for MACB and MCI. Don't 9261 systems use Ethernet?
> >> Or is that part still in the board specific files?
> >>
> that part is in the board file.

Sorry for that confusion. I just checked the 9261 data sheet and
to my surprise the 9261 does not have a MACB or any other LAN
interface on the SoC!

It seems that the 9261-ek and derivatives use an external LAN chip,
DM9000.

That chip's initialisation, of course, does not belong into the 9261 SoC
code.

So it must stay in the board code.

Best Regards,
Reinhard
Reinhard Meyer - July 26, 2011, 9:58 a.m.
Dear Asen Dimov,
> > I have this as a local patch and could squash this onto yours, or
> > you may provide an updated patch.
> I will try once more to make it as it should be.

The squashed version is at top of u-boot-atmel/rework-at91sam9261.
If you are OK with that, I'll post the patch and apply it to master.
(I also changed the subject a bit)

Best Regards,
Reinhard
Asen Dimov - July 26, 2011, 11:23 a.m.
Hello Reinhard,

On 07/26/2011 12:58 PM, Reinhard Meyer wrote:
> Dear Asen Dimov,
>>> I have this as a local patch and could squash this onto yours, or
>>> you may provide an updated patch.
>> I will try once more to make it as it should be.
> The squashed version is at top of u-boot-atmel/rework-at91sam9261.
> If you are OK with that, I'll post the patch and apply it to master.
> (I also changed the subject a bit)
Good, I am OK with that. The pm9261 now boots and the patch will come soon.
> Best Regards,
> Reinhard
Regards,
Asen

Patch

diff --git a/arch/arm/cpu/arm926ejs/at91/at91sam9261_devices.c b/arch/arm/cpu/arm926ejs/at91/at91sam9261_devices.c
index b4353ef..68401f6 100644
--- a/arch/arm/cpu/arm926ejs/at91/at91sam9261_devices.c
+++ b/arch/arm/cpu/arm926ejs/at91/at91sam9261_devices.c
@@ -23,77 +23,73 @@ 
  */
 
 #include <common.h>
+#include <asm/io.h>
 #include <asm/arch/at91_common.h>
 #include <asm/arch/at91_pmc.h>
 #include <asm/arch/gpio.h>
-#include <asm/arch/io.h>
+
+/*
+ * if CONFIG_AT91_GPIO_PULLUP ist set, keep pullups on on all
+ * peripheral pins. Good to have if hardware is soldered optionally
+ * or in case of SPI no slave is selected. Avoid lines to float
+ * needlessly. Use a short local PUP define.
+ *
+ * Due to errata "TXD floats when CTS is inactive" pullups are always
+ * on for TXD pins.
+ */
+#ifdef CONFIG_AT91_GPIO_PULLUP
+# define PUP CONFIG_AT91_GPIO_PULLUP
+#else
+# define PUP 0
+#endif
 
 void at91_serial0_hw_init(void)
 {
-	at91_pmc_t	*pmc	= (at91_pmc_t *) AT91_PMC_BASE;
+	at91_pmc_t	*pmc	= (at91_pmc_t *) ATMEL_BASE_PMC;
 
 	at91_set_a_periph(AT91_PIO_PORTC, 8, 1);		/* TXD0 */
 	at91_set_a_periph(AT91_PIO_PORTC, 9, 0);		/* RXD0 */
-	writel(1 << AT91SAM9261_ID_US0, &pmc->pcer);
+	writel(1 << ATMEL_ID_USART0, &pmc->pcer);
 }
 
 void at91_serial1_hw_init(void)
 {
-	at91_pmc_t	*pmc	= (at91_pmc_t *) AT91_PMC_BASE;
+	at91_pmc_t	*pmc	= (at91_pmc_t *) ATMEL_BASE_PMC;
 
 	at91_set_a_periph(AT91_PIO_PORTC, 12, 1);		/* TXD1 */
 	at91_set_a_periph(AT91_PIO_PORTC, 13, 0);		/* RXD1 */
-	writel(1 << AT91SAM9261_ID_US1, &pmc->pcer);
+	writel(1 << ATMEL_ID_USART1, &pmc->pcer);
 }
 
 void at91_serial2_hw_init(void)
 {
-	at91_pmc_t	*pmc	= (at91_pmc_t *) AT91_PMC_BASE;
+	at91_pmc_t	*pmc	= (at91_pmc_t *) ATMEL_BASE_PMC;
 
 	at91_set_a_periph(AT91_PIO_PORTC, 14, 1);		/* TXD2 */
 	at91_set_a_periph(AT91_PIO_PORTC, 15, 0);		/* RXD2 */
-	writel(1 << AT91SAM9261_ID_US2, &pmc->pcer);
+	writel(1 << ATMEL_ID_USART2, &pmc->pcer);
 }
 
-void at91_serial3_hw_init(void)
+void at91_seriald_hw_init(void)
 {
-	at91_pmc_t	*pmc	= (at91_pmc_t *) AT91_PMC_BASE;
+	at91_pmc_t	*pmc	= (at91_pmc_t *) ATMEL_BASE_PMC;
 
 	at91_set_a_periph(AT91_PIO_PORTA, 9, 0);		/* DRXD */
 	at91_set_a_periph(AT91_PIO_PORTA, 10, 1);		/* DTXD */
-	writel(1 << AT91_ID_SYS, &pmc->pcer);
-}
-
-void at91_serial_hw_init(void)
-{
-#ifdef CONFIG_USART0
-	at91_serial0_hw_init();
-#endif
-
-#ifdef CONFIG_USART1
-	at91_serial1_hw_init();
-#endif
-
-#ifdef CONFIG_USART2
-	at91_serial2_hw_init();
-#endif
-
-#ifdef CONFIG_USART3	/* DBGU */
-	at91_serial3_hw_init();
-#endif
+	writel(1 << ATMEL_ID_SYS, &pmc->pcer);
 }
 
 #ifdef CONFIG_HAS_DATAFLASH
 void at91_spi0_hw_init(unsigned long cs_mask)
 {
-	at91_pmc_t	*pmc	= (at91_pmc_t *) AT91_PMC_BASE;
+	at91_pmc_t	*pmc	= (at91_pmc_t *) ATMEL_BASE_PMC;
 
 	at91_set_a_periph(AT91_PIO_PORTA, 0, 0);	/* SPI0_MISO */
 	at91_set_a_periph(AT91_PIO_PORTA, 1, 0);	/* SPI0_MOSI */
 	at91_set_a_periph(AT91_PIO_PORTA, 2, 0);	/* SPI0_SPCK */
 
 	/* Enable clock */
-	writel(1 << AT91SAM9261_ID_SPI0, &pmc->pcer);
+	writel(1 << ATMEL_ID_SPI0, &pmc->pcer);
 
 	if (cs_mask & (1 << 0)) {
 		at91_set_a_periph(AT91_PIO_PORTA, 3, 1);
@@ -123,14 +119,14 @@  void at91_spi0_hw_init(unsigned long cs_mask)
 
 void at91_spi1_hw_init(unsigned long cs_mask)
 {
-	at91_pmc_t	*pmc	= (at91_pmc_t *) AT91_PMC_BASE;
+	at91_pmc_t	*pmc	= (at91_pmc_t *) ATMEL_BASE_PMC;
 
 	at91_set_a_periph(AT91_PIO_PORTB, 30, 0);	/* SPI1_MISO */
 	at91_set_a_periph(AT91_PIO_PORTB, 31, 0);	/* SPI1_MOSI */
 	at91_set_a_periph(AT91_PIO_PORTB, 29, 0);	/* SPI1_SPCK */
 
 	/* Enable clock */
-	writel(1 << AT91SAM9261_ID_SPI1, &pmc->pcer);
+	writel(1 << ATMEL_ID_SPI1, &pmc->pcer);
 
 	if (cs_mask & (1 << 0)) {
 		at91_set_a_periph(AT91_PIO_PORTB, 28, 1);
diff --git a/arch/arm/include/asm/arch-at91/at91sam9261.h b/arch/arm/include/asm/arch-at91/at91sam9261.h
index c85fd29..a07f273 100644
--- a/arch/arm/include/asm/arch-at91/at91sam9261.h
+++ b/arch/arm/include/asm/arch-at91/at91sam9261.h
@@ -125,6 +125,7 @@ 
  * Other misc defines
  */
 #define ATMEL_PIO_PORTS		3		/* theese SoCs have 3 PIO */
+#define ATMEL_PMC_UHP		AT91SAM926x_PMC_UHP
 #define ATMEL_BASE_PIO		ATMEL_BASE_PIOA
 
 /*