Message ID | 1311008656-28387-1-git-send-email-dimov@ronetix.at |
---|---|
State | Superseded |
Delegated to: | Reinhard Meyer |
Headers | show |
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
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
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
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
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
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
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
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 /*
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(-)