All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ulf Samuelsson <ulf.samuelsson@atmel.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 3/5] ARM: Add/Improve support for Atmel AT91RM9200DK/EK
Date: Tue, 06 Jan 2009 21:20:43 +0100	[thread overview]
Message-ID: <4963BD1B.6080903@atmel.com> (raw)

This patchset updates the at91rm9200dk board support to
look similar to the rest of the at91 boards, using more modern
access functions for I/O instead of direct pointer accesses.
Add support for blinking coloured LEDs.

A derivative of the board is added,
----
at91rm9200dk_df        - at91rm9200dk with environment in dataflash


Support for the AT91RM9200EK is added
----
at91rm9200ek        - at91rm9200ek with environment in nor flash


Support for a generic AT91RM9200 board with dataflash is added
----
at91rm9200df        - at91rm9200 with environment in dataflash
                and no norflash drivers.

-------------------------------------------------------------------------------
Patch [1/5]    Updates to include/asm-arm/arch.at91rm9200
Patch [2/5]    Updates to Makefile and include/configs for
at91rm9200dk/dk_df
Patch [3/5]    Updates to board/atmel/at91rm9200dk
Patch [4/5]    Updates to Makefile and include/configs for at91rm9200df/ek
Patch [5/5]    Updates to MAKEALL

[3/5] AFFECTS
    board/atmel/at91rm9200dk/at91rm9200dk.c
    board/atmel/at91rm9200dk/led.c
    board/atmel/at91rm9200dk/mux.c

Signed-off-by: Ulf Samuelsson <ulf.samuelsson@atmel.com>
---
diff -urN
u-boot-2009.01-rc1-0rig//board/atmel/at91rm9200dk/at91rm9200dk.c
u-boot-2009.01/board/atmel/at91rm9200dk/at91rm9200dk.c
--- u-boot-2009.01-rc1-0rig//board/atmel/at91rm9200dk/at91rm9200dk.c   
2009-01-01 13:09:31.000000000 +0100
+++ u-boot-2009.01/board/atmel/at91rm9200dk/at91rm9200dk.c    2009-01-01
16:11:36.000000000 +0100
@@ -3,6 +3,9 @@
  * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
  * Marius Groeger <mgroeger@sysgo.de>
  *
+ * (C) Copyright 2008
+ * Ulf Samuelsson <ulf.samuelsson@atmel.com>
+ *
  * See file CREDITS for list of people who contributed to this
  * project.
  *
@@ -24,6 +27,10 @@
 
 #include <common.h>
 #include <asm/arch/AT91RM9200.h>
+#include <asm/arch/at91_pmc.h>
+#include <asm/arch/at91_pio.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/io.h>
 #include <at91rm9200_net.h>
 #include <dm9161.h>
 
@@ -41,13 +48,13 @@
 
     /* Correct IRDA resistor problem */
     /* Set PA23_TXD in Output */
-    ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_OER = AT91C_PA23_TXD2;
+    at91_set_gpio_output(AT91_PIN_PA23, 1);
 
     /* memory and cpu-speed are setup before relocation */
     /* so we do _nothing_ here */
 
     /* arch number of AT91RM9200DK-Board */
-    gd->bd->bi_arch_number = MACH_TYPE_AT91RM9200DK;
+    gd->bd->bi_arch_number = AT91RM9200_BOARD;
     /* adress of boot parameters */
     gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
 
@@ -91,46 +98,58 @@
  */
 #if defined(CONFIG_CMD_NAND)
 extern ulong nand_probe (ulong physadr);
+/* set the bus interface characteristics based on
+ * tDS Data Set up Time 30 - ns
+ * tDH Data Hold Time 20 - ns
+ * tALS ALE Set up Time 20 - ns
+ * 16ns at 60 MHz ~= 3
+ */
 
-#define AT91_SMARTMEDIA_BASE 0x40000000    /* physical address to
access memory on NCS3 */
-void nand_init (void)
-{
-    /* Setup Smart Media, fitst enable the address range of CS3 */
-    *AT91C_EBI_CSA |= AT91C_EBI_CS3A_SMC_SmartMedia;
-    /* set the bus interface characteristics based on
-       tDS Data Set up Time 30 - ns
-       tDH Data Hold Time 20 - ns
-       tALS ALE Set up Time 20 - ns
-       16ns at 60 MHz ~= 3  */
 /*memory mapping structures */
 #define SM_ID_RWH    (5 << 28)
 #define SM_RWH        (1 << 28)
 #define SM_RWS        (0 << 24)
 #define SM_TDF        (1 << 8)
 #define SM_NWS        (3)
-    AT91C_BASE_SMC2->SMC2_CSR[3] = (SM_RWH | SM_RWS |
-        AT91C_SMC2_ACSS_STANDARD | AT91C_SMC2_DBW_8 |
-        SM_TDF | AT91C_SMC2_WSEN | SM_NWS);
+
+#define    SMARTMEDIA_INIT    (            \
+        SM_RWH |            \
+        SM_RWS |            \
+        AT91C_SMC2_ACSS_STANDARD |    \
+        AT91C_SMC2_DBW_8 |        \
+        SM_TDF |            \
+        AT91C_SMC2_WSEN |        \
+        SM_NWS                \
+        )
+
+
+
+#define AT91_SMARTMEDIA_BASE 0x40000000    /* physical address to
access memory on NCS3 */
+void nand_init (void)
+{
+    /* Setup Smart Media, fitst enable the address range of CS3 */
+    /* *AT91C_EBI_CSA |= AT91C_EBI_CS3A_SMC_SmartMedia; */
+    at91_sys_setbit(AT91C_EBI_CS3A_SMC_SmartMedia, AT91_EBI_CSA);
+
+    /* Init Smartmedia Interface */
+    at91_sys_write(AT91_SMC2_CSR3, SMARTMEDIA_INIT);
 
     /* enable the SMOE line PC0=SMCE, A21=CLE, A22=ALE */
-    *AT91C_PIOC_ASR = AT91C_PC0_BFCK | AT91C_PC1_BFRDY_SMOE |
-        AT91C_PC3_BFBAA_SMWE;
-    *AT91C_PIOC_PDR = AT91C_PC0_BFCK | AT91C_PC1_BFRDY_SMOE |
-        AT91C_PC3_BFBAA_SMWE;
+    at91_set_A_periph(AT91_PIN_PC0, 0);    /* BFCK    */
+    at91_set_A_periph(AT91_PIN_PC1, 0);    /* BFRDY/SMOE */
+    at91_set_A_periph(AT91_PIN_PC3, 0);    /* BFBAA/SMWE */
 
     /* Configure PC2 as input (signal READY of the SmartMedia) */
-    *AT91C_PIOC_PER = AT91C_PC2_BFAVD;    /* enable direct output enable */
-    *AT91C_PIOC_ODR = AT91C_PC2_BFAVD;    /* disable output */
+    at91_set_gpio_input(AT91_PIN_PC2, 0);
 
     /* Configure PB1 as input (signal Card Detect of the SmartMedia) */
-    *AT91C_PIOB_PER = AT91C_PIO_PB1;    /* enable direct output enable */
-    *AT91C_PIOB_ODR = AT91C_PIO_PB1;    /* disable output */
+    at91_set_gpio_input(AT91_PIN_PB1, 0);
 
     /* PIOB and PIOC clock enabling */
-    *AT91C_PMC_PCER = 1 << AT91C_ID_PIOB;
-    *AT91C_PMC_PCER = 1 << AT91C_ID_PIOC;
+    at91_sys_write(AT91_PMC_PCER, 1 << AT91RM9200_ID_PIOB);
+    at91_sys_write(AT91_PMC_PCER, 1 << AT91RM9200_ID_PIOC);
 
-    if (*AT91C_PIOB_PDSR & AT91C_PIO_PB1)
+    if (at91_get_gpio_value(AT91_PIN_PB1))
         printf ("  No SmartMedia card inserted\n");
 #ifdef DEBUG
     printf ("  SmartMedia card inserted\n");
@@ -140,3 +159,4 @@
     printf ("%4lu MB\n", nand_probe(AT91_SMARTMEDIA_BASE) >> 20);
 }
 #endif
+
diff -urN u-boot-2009.01-rc1-0rig//board/atmel/at91rm9200dk/led.c
u-boot-2009.01/board/atmel/at91rm9200dk/led.c
--- u-boot-2009.01-rc1-0rig//board/atmel/at91rm9200dk/led.c   
2009-01-01 13:09:31.000000000 +0100
+++ u-boot-2009.01/board/atmel/at91rm9200dk/led.c    2009-01-01
15:53:56.000000000 +0100
@@ -24,57 +24,105 @@
 
 #include <common.h>
 #include <asm/arch/AT91RM9200.h>
+/*#include <asm/arch/at91_pmc.h>*/
+#include <asm/arch/gpio.h>
+#include <asm/arch/io.h>
 
-#define    GREEN_LED    AT91C_PIO_PB0
-#define    YELLOW_LED    AT91C_PIO_PB1
-#define    RED_LED    AT91C_PIO_PB2
+#define    GREEN_LED            AT91_PIN_PB0
+#define    YELLOW_LED            AT91_PIN_PB1
+#define    RED_LED                AT91_PIN_PB2
 
-void    green_LED_on(void)
+
+#define    GREEN_LED_ON            0
+#define    GREEN_LED_OFF            1
+#define    YELLOW_LED_ON            0
+#define    YELLOW_LED_OFF            1
+#define    RED_LED_ON            0
+#define    RED_LED_OFF            1
+
+#define    TIME_SLICE            500000
+
+void yellow_LED_on(void)
+{
+    at91_set_gpio_value(YELLOW_LED, YELLOW_LED_ON);
+}
+
+void yellow_LED_off(void)
+{
+    at91_set_gpio_value(YELLOW_LED, YELLOW_LED_OFF);
+}
+
+void red_LED_on(void)
 {
-    AT91PS_PIO    PIOB    = AT91C_BASE_PIOB;
-    PIOB->PIO_CODR        = GREEN_LED;
+    at91_set_gpio_value(RED_LED, RED_LED_ON);
 }
 
-void     yellow_LED_on(void)
+void red_LED_off(void)
 {
-    AT91PS_PIO    PIOB    = AT91C_BASE_PIOB;
-    PIOB->PIO_CODR        = YELLOW_LED;
+    at91_set_gpio_value(RED_LED, RED_LED_OFF);
 }
 
-void     red_LED_on(void)
+void green_LED_on(void)
 {
-    AT91PS_PIO    PIOB    = AT91C_BASE_PIOB;
-    PIOB->PIO_CODR        = RED_LED;
+    at91_set_gpio_value(GREEN_LED, GREEN_LED_ON);
 }
 
-void    green_LED_off(void)
+void green_LED_off(void)
 {
-    AT91PS_PIO    PIOB    = AT91C_BASE_PIOB;
-    PIOB->PIO_SODR        = GREEN_LED;
+    at91_set_gpio_value(GREEN_LED, GREEN_LED_OFF);
 }
 
-void    yellow_LED_off(void)
+static void    delay(unsigned int    time)
 {
-    AT91PS_PIO    PIOB    = AT91C_BASE_PIOB;
-    PIOB->PIO_SODR        = YELLOW_LED;
+    volatile unsigned int    counter = time;
+    while(counter > 0) counter--;
 }
 
-void    red_LED_off(void)
+void    green_LED_blink(unsigned int time)
 {
-    AT91PS_PIO    PIOB    = AT91C_BASE_PIOB;
-    PIOB->PIO_SODR        = RED_LED;
+    while(time > 0) {
+        green_LED_on();
+        delay(TIME_SLICE);
+        green_LED_off();
+        delay(TIME_SLICE);
+        time--;
+    }
 }
 
+void    yellow_LED_blink(unsigned int time)
+{
+    while(time > 0) {
+        yellow_LED_on();
+        delay(TIME_SLICE);
+        yellow_LED_off();
+        delay(TIME_SLICE);
+        time--;
+    }
+}
 
-void coloured_LED_init (void)
+void    red_LED_blink(unsigned int time)
 {
-    AT91PS_PIO    PIOB    = AT91C_BASE_PIOB;
-    AT91PS_PMC    PMC    = AT91C_BASE_PMC;
-    PMC->PMC_PCER        = (1 << AT91C_ID_PIOB);    /* Enable PIOB clock */
-    /* Disable peripherals on LEDs */
-    PIOB->PIO_PER        = AT91C_PIO_PB2 | AT91C_PIO_PB1 | AT91C_PIO_PB0;
-    /* Enable pins as outputs */
-    PIOB->PIO_OER        = AT91C_PIO_PB2 | AT91C_PIO_PB1 | AT91C_PIO_PB0;
-    /* Turn all LEDs OFF */
-    PIOB->PIO_SODR        = AT91C_PIO_PB2 | AT91C_PIO_PB1 | AT91C_PIO_PB0;
+    while(time > 0) {
+        red_LED_on();
+        delay(TIME_SLICE);
+        red_LED_off();
+        delay(TIME_SLICE);
+        time--;
+    }
 }
+
+void coloured_LED_init(void)
+{
+    /* Enable clock */
+    at91_sys_write(AT91C_PMC_PCER, 1 << AT91RM9200_ID_PIOB);
+
+    at91_set_gpio_output(GREEN_LED, 1);
+    at91_set_gpio_output(YELLOW_LED, 1);
+    at91_set_gpio_output(RED_LED, 1);
+
+    at91_set_gpio_value(GREEN_LED,    GREEN_LED_OFF);
+    at91_set_gpio_value(YELLOW_LED, YELLOW_LED_OFF);
+    at91_set_gpio_value(RED_LED,    RED_LED_ON);
+}
+
+
diff -urN u-boot-2009.01-rc1-0rig//board/atmel/at91rm9200dk/mux.c
u-boot-2009.01/board/atmel/at91rm9200dk/mux.c
--- u-boot-2009.01-rc1-0rig//board/atmel/at91rm9200dk/mux.c   
2009-01-01 13:09:31.000000000 +0100
+++ u-boot-2009.01/board/atmel/at91rm9200dk/mux.c    2009-01-01
16:38:01.000000000 +0100
@@ -1,37 +1,29 @@
 #include <config.h>
 #include <common.h>
 #include <asm/hardware.h>
+#include <asm/arch/at91_pio.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/io.h>
 #include <dataflash.h>
 
 int AT91F_GetMuxStatus(void) {
-#ifdef    DATAFLASH_MMC_SELECT
-    AT91C_BASE_PIOB->PIO_PER = DATAFLASH_MMC_SELECT; /* Set in PIO mode */
-    AT91C_BASE_PIOB->PIO_OER = DATAFLASH_MMC_SELECT; /* Configure in
output */
-
-
-    if(AT91C_BASE_PIOB->PIO_ODSR & DATAFLASH_MMC_SELECT) {
-        return 1;
-    } else {
-        return 0;
-    }
-#endif
+#ifdef    CONFIG_CMD_AT91_SPIMUX
+    return at91_get_gpio_value(DATAFLASH_MMC_SELECT);
+#else
     return 0;
+#endif
 }
 
-void AT91F_SelectMMC(void) {
-#ifdef    DATAFLASH_MMC_SELECT
-    AT91C_BASE_PIOB->PIO_PER = DATAFLASH_MMC_SELECT;    /* Set in PIO
mode */
-    AT91C_BASE_PIOB->PIO_OER = DATAFLASH_MMC_SELECT;    /* Configure in
output */
-    /* Set Output */
-    AT91C_BASE_PIOB->PIO_SODR = DATAFLASH_MMC_SELECT;
+void AT91F_SelectMMC(void)
+{
+#ifdef    CONFIG_CMD_AT91_SPIMUX
+    at91_set_gpio_output(DATAFLASH_MMC_SELECT, 1);    /* Set in PIO
mode and select SD-Card*/
 #endif
 }
 
 void AT91F_SelectSPI(void) {
-#ifdef    DATAFLASH_MMC_SELECT
-    AT91C_BASE_PIOB->PIO_PER = DATAFLASH_MMC_SELECT;    /* Set in PIO
mode */
-    AT91C_BASE_PIOB->PIO_OER = DATAFLASH_MMC_SELECT;    /* Configure in
output */
-    /* Clear Output */
-    AT91C_BASE_PIOB->PIO_CODR = DATAFLASH_MMC_SELECT;
+#ifdef    CONFIG_CMD_AT91_SPIMUX
+    at91_set_gpio_output(DATAFLASH_MMC_SELECT, 0);    /* Set in PIO
mode and select SPI */
 #endif
 }
+


Best Regards
Ulf Samuelsson

                 reply	other threads:[~2009-01-06 20:20 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4963BD1B.6080903@atmel.com \
    --to=ulf.samuelsson@atmel.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.