All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heiko Schocher <hs@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/4 v4] arm: add support for the mgcoge2_arm_p1a board from keymile
Date: Mon, 15 Feb 2010 09:07:14 +0100	[thread overview]
Message-ID: <4B7900B2.1070003@denx.de> (raw)
In-Reply-To: <F766E4F80769BD478052FB6533FA745D1860FC8B2D@SC-VEXCH4.marvell.com>

Hello Prafulla,

Prafulla Wadaskar wrote:
>> -----Original Message-----
>> From: Heiko Schocher [mailto:hs at denx.de]
>> Sent: Friday, February 12, 2010 1:36 PM
>> To: U-Boot user list
>> Cc: Wolfgang Denk; Prafulla Wadaskar; Scott Wood; Stefan Roese
>> Subject: [PATCH 1/4 v4] arm: add support for the
>> mgcoge2_arm_p1a board from keymile
>>
>> Add support for the ARM part of the mgcoge2. This board
>> is based on the Marvell Kirkwood (88F6281) SoC. As there
>> come more board variants, common code is stored in
>> board/keymile/km_arm/km_arm.c
>>
>> Signed-off-by: Holger Brunck <holger.brunck@keymile.com>
>> Signed-off-by: Stefan Roese <sr@denx.de>
>> Signed-off-by: Heiko Schocher <hs@denx.de>
>> ---
>> - changes since v1:
>>   added comments from Wolfgang Denk:
>>   get rid of flash_info_t define in board config
>>   (to get this working patch 1/2 is introduced/needed)
>>
>> - changes since v2:
>>   added comments from Wolfgang Denk
>>   - rearranged if/else in do_spi_toggle()
>>   - added I/O accessor functions for bootcounter
>>
>> - changes since v3:
>>   added comment Scott Wood
>>   - removed nand_init in do_spi_toggle()
>>
>>   added comments from Prafulla Wadagaskar
>>   - km-arm.h renamed to km_arm.h
>>   - reworked eeprom_write_enable() (deleted it)
>>     (when reviewing this function, it cropped up, that
>>      this pin is connected through a gpio pin, not as
>>      in previous version, through the boco (a FPGA))
>>   - moved set_sda(), set_scl(), get_sda(), get_scl()
>>     to km_arm.c
>>   - split patch in 4 patches (for each board an extra patch)
>>   - renamed sdramregs.txt in kwbimage.cfg, also license
>>     info added.
>>
>>  MAINTAINERS                       |    2 +
>>  MAKEALL                           |    1 +
>>  Makefile                          |    3 +
>>  board/keymile/common/common.c     |    6 +-
>>  board/keymile/km_arm/Makefile     |   51 ++++++
>>  board/keymile/km_arm/config.mk    |   28 +++
>>  board/keymile/km_arm/km_arm.c     |  339
>> +++++++++++++++++++++++++++++++++++++
>>  board/keymile/km_arm/kwbimage.cfg |   59 +++++++
>>  include/configs/km_arm.h          |  191 +++++++++++++++++++++
>>  include/configs/mgcoge2_arm_p1a.h |   96 +++++++++++
>>  10 files changed, 774 insertions(+), 2 deletions(-)
>>  create mode 100644 board/keymile/km_arm/Makefile
>>  create mode 100644 board/keymile/km_arm/config.mk
>>  create mode 100644 board/keymile/km_arm/km_arm.c
>>  create mode 100644 board/keymile/km_arm/kwbimage.cfg
>>  create mode 100644 include/configs/km_arm.h
>>  create mode 100644 include/configs/mgcoge2_arm_p1a.h
[...]
>> diff --git a/board/keymile/common/common.c
>> b/board/keymile/common/common.c
>> index ec27bda..7b4eefd 100644
>> --- a/board/keymile/common/common.c
>> +++ b/board/keymile/common/common.c
>> @@ -35,6 +35,7 @@
>>  #include <libfdt.h>
>>  #endif
>>
>> +#include "../common/common.h"
> 
> Can't you use "common.h" here ?

No, this is "just" a keymile specific header for including
functions, which are "common" for all keymile boards ...

>>  #if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
>>  #include <i2c.h>
>>
>> @@ -421,7 +422,6 @@ static int get_scl (void)
>>
>>       return ((val & SCL_BIT) == SCL_BIT);
>>  }
>> -
>>  #endif
>>
>>  #if !defined(CONFIG_KMETER1)
>> @@ -500,7 +500,7 @@ void i2c_init_board(void)
>>       out_8 (&dev->cr, (I2C_CR_MEN));
>>
>>  #else
>> -#if defined(CONFIG_HARD_I2C)
>> +#if defined(CONFIG_HARD_I2C) && !defined(CONFIG_MACH_SUEN3)
> 
> This is not with reference to this board

It is defined in include/configs/km_arm.h line 41

(As I said, this "4" boards are all the same, just different
hardwarerevisions ...)

>>       volatile immap_t *immap = (immap_t *)CONFIG_SYS_IMMR ;
>>       volatile i2c8260_t *i2c = (i2c8260_t *)&immap->im_i2c;
>>
>> @@ -578,10 +578,12 @@ int fdt_get_node_and_value (void *blob,
>>  }
>>  #endif
>>
>> +#if !defined(CONFIG_MACH_SUEN3)
> 
> Ditto

See comment above.

[...]
>> diff --git a/board/keymile/km_arm/km_arm.c
>> b/board/keymile/km_arm/km_arm.c
>> new file mode 100644
>> index 0000000..e1cf379
>> --- /dev/null
>> +++ b/board/keymile/km_arm/km_arm.c
[...]
>> +/* Multi-Purpose Pins Functionality configuration */
>> +u32 kwmpp_config[] = {
>> +     MPP0_NF_IO2,
>> +     MPP1_NF_IO3,
>> +     MPP2_NF_IO4,
>> +     MPP3_NF_IO5,
>> +     MPP4_NF_IO6,
>> +     MPP5_NF_IO7,
>> +     MPP6_SYSRST_OUTn,
>> +     MPP7_PEX_RST_OUTn,
>> +#if defined(CONFIG_KIRKWOOD_GPIO)
> 
> Why does you need this ifdef here? for a particular board this should be pre-defined.

Yep, this define should be CONFIG_SOFT_I2C.

>> +     MPP8_GPIO,      /* SDA */
>> +     MPP9_GPIO,      /* SCL */
>> +#else
>> +     MPP8_TW_SDA,
>> +     MPP9_TW_SCK,
>> +#endif
>> +     MPP10_UART0_TXD,
>> +     MPP11_UART0_RXD,
>> +     MPP12_GPO,              /* Reserved */
>> +     MPP13_UART1_TXD,
>> +     MPP14_UART1_RXD,
>> +     MPP15_GPIO,             /* Not used */
>> +     MPP16_GPIO,             /* Not used */
>> +     MPP17_GPIO,             /* Reserved */
>> +     MPP18_NF_IO0,
>> +     MPP19_NF_IO1,
>> +     MPP20_GPIO,
>> +     MPP21_GPIO,
>> +     MPP22_GPIO,
>> +     MPP23_GPIO,
>> +     MPP24_GPIO,
>> +     MPP25_GPIO,
>> +     MPP26_GPIO,
>> +     MPP27_GPIO,
>> +     MPP28_GPIO,
>> +     MPP29_GPIO,
>> +     MPP30_GPIO,
>> +     MPP31_GPIO,
>> +     MPP32_GPIO,
>> +     MPP33_GPIO,
>> +     MPP34_GPIO,             /* CDL1 (input) */
>> +     MPP35_GPIO,             /* CDL2 (input) */
>> +     MPP36_GPIO,             /* MAIN_IRQ (input) */
>> +     MPP37_GPIO,             /* BOARD_LED */
>> +     MPP38_GPIO,             /* Piggy3 LED[1] */
>> +     MPP39_GPIO,             /* Piggy3 LED[2] */
>> +     MPP40_GPIO,             /* Piggy3 LED[3] */
>> +     MPP41_GPIO,             /* Piggy3 LED[4] */
>> +     MPP42_GPIO,             /* Piggy3 LED[5] */
>> +     MPP43_GPIO,             /* Piggy3 LED[6] */
>> +     MPP44_GPIO,             /* Piggy3 LED[7] */
>> +     MPP45_GPIO,             /* Piggy3 LED[8] */
>> +     MPP46_GPIO,             /* Reserved */
>> +     MPP47_GPIO,             /* Reserved */
>> +     MPP48_GPIO,             /* Reserved */
>> +     MPP49_GPIO,             /* SW_INTOUTn */
>> +     0
>> +};
>> +
>> +int ethernet_present(void)
>> +{
>> +     uchar   buf;
>> +     int     ret = 0;
>> +
>> +#if defined(CONFIG_SUEN_P1A)
> 
> Ditto

I correct this.

> 
>> +     int     oldbusnum = i2c_get_bus_num();
>> +
>> +     i2c_set_bus_num(io_dev);
>> +     if (i2c_read(0x74, 0, 1, &buf, 1) != 0) {
>> +             printf ("%s: Error reading EEprom\n", __FUNCTION__);
>> +             i2c_set_bus_num(oldbusnum);
>> +             return -1;
>> +     }
>> +     if ((buf & 0x80) == 0x80) {
>> +             ret = 1;
>> +     }
>> +     i2c_set_bus_num(oldbusnum);
>> +#else
>> +     if (i2c_read(0x10, 2, 1, &buf, 1) != 0) {
>> +             printf ("%s: Error reading Boco\n", __FUNCTION__);
>> +             return -1;
>> +     }
>> +     if ((buf & 0x40) == 0x40) {
>> +             ret = 1;
>> +     }
>> +#endif
>> +     return ret;
>> +}
>> +
>> +int misc_init_r(void)
>> +{
>> +     I2C_MUX_DEVICE  *i2cdev;
>> +     char *str;
>> +     int mach_type;
>> +
>> +     /* add I2C Bus for I/O Expander */
>> +     i2cdev = i2c_mux_ident_muxstring((uchar *)"pca9554a:70:a");
>> +     io_dev = i2cdev->busid;
>> +     puts("Piggy:");
>> +     if (ethernet_present() == 0)
>> +             puts (" not");
>> +     puts(" present\n");
>> +
>> +     str = getenv("mach_type");
>> +     if (str != NULL) {
>> +             mach_type = simple_strtoul(str, NULL, 10);
>> +             printf("Overwriting MACH_TYPE with %d!!!\n", mach_type);
>> +             gd->bd->bi_arch_number = mach_type;
>> +     }
>> +     return 0;
>> +}
>> +
>> +int board_init(void)
>> +{
>> +     u32 tmp;
>> +
>> +     kirkwood_mpp_conf(kwmpp_config);
>> +
>> +     /*
>> +      * The FLASH_GPIO_PIN switches between using a
>> +      * NAND or a SPI FLASH. Set this pin on start
>> +      * to NAND mode.
>> +      */
>> +     tmp = readl(KW_GPIO0_BASE);
>> +     writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE);
>> +     tmp = readl(KW_GPIO0_BASE + 4);
>> +     writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE + 4);
>> +     printf("KM: setting NAND mode\n");
>> +
>> +     /*
>> +      * arch number of board
>> +      */
>> +     gd->bd->bi_arch_number = MACH_TYPE_SUEN3;
> 
> This does not match with the board you are supporting, better to use similar name

As I said above, this boards are all the same, just different
hardwarerevisions, so theys all have one MACH_TYPE_ ...

>> +
>> +     /* address of boot parameters */
>> +     gd->bd->bi_boot_params = kw_sdram_bar(0) + 0x100;
>> +
>> +#if defined(CONFIG_KIRKWOOD_GPIO)
> 
> Avoid this at least for this board patch

Don;t understand this! Why? The board uses this pins for
I2C bitbang, so I must initialize the pins ...

>> +     /* init the GPIO for I2C Bitbang driver */
>> +     kw_gpio_set_valid(SUEN3_SDA_PIN, 1);
>> +     kw_gpio_set_valid(SUEN3_SCL_PIN, 1);
>> +     kw_gpio_direction_output(SUEN3_SDA_PIN, 0);
>> +     kw_gpio_direction_output(SUEN3_SCL_PIN, 0);
>> +#if defined(CONFIG_SYS_EEPROM_WREN)
>> +     kw_gpio_set_valid(SUEN3_ENV_WP, 38);
>> +     kw_gpio_direction_output(SUEN3_ENV_WP, 1);
>> +#endif
>> +#endif
>> +     return 0;
>> +}
[...]
>> +
>> +#if (defined(CONFIG_MACH_SUEN3) && defined(CONFIG_HARD_I2C))
> 
> Ditto..

What do you mean here?

>> +#error I2C bus resetsequence not implemented yet.
>> +#endif
>> +
>> +#if (defined(CONFIG_MACH_SUEN3) && defined(CONFIG_SOFT_I2C))
> 
> Ditto..

What do you mean here?

>> +void set_sda (int state)
>> +{
>> +     I2C_ACTIVE;
>> +     I2C_SDA(state);
>> +}
>> +
>> +void set_scl (int state)
>> +{
>> +     I2C_SCL(state);
>> +}
>> +
>> +int get_sda (void)
>> +{
>> +     I2C_TRISTATE;
>> +     return I2C_READ;
>> +}
>> +
>> +int get_scl (void)
>> +{
>> +     return (kw_gpio_get_value(SUEN3_SCL_PIN) ? 1 : 0);
>> +}
>> +#endif
> 
> Where these are used, I could not find any reference in this patch

They are used in board/keymile/common/common.c for
the I2C deblocking sequence. (This is one of the common code
used for all keymile boards)

>> +
>> +#if defined(CONFIG_SYS_EEPROM_WREN)
>> +int eeprom_write_enable (unsigned dev_addr, int state)
>> +{
>> +     kw_gpio_set_value(SUEN3_ENV_WP, !state);
>> +
>> +     return !kw_gpio_get_value(SUEN3_ENV_WP);
>> +}
>> +#endif
>> diff --git a/board/keymile/km_arm/kwbimage.cfg
>> b/board/keymile/km_arm/kwbimage.cfg
>> new file mode 100644
>> index 0000000..bfe0889
>> --- /dev/null
>> +++ b/board/keymile/km_arm/kwbimage.cfg
>> @@ -0,0 +1,59 @@
>> +#
>> +# (C) Copyright 2010
>> +# Heiko Schocher, DENX Software Engineering, hs at denx.de.
>> +#
>> +# See file CREDITS for list of people who contributed to this
>> +# project.
>> +#
>> +# This program is free software; you can redistribute it and/or
>> +# modify it under the terms of the GNU General Public License as
>> +# published by the Free Software Foundation; either version 2 of
>> +# the License, or (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program; if not, write to the Free Software
>> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
>> +# MA 02110-1301 USA
>> +#
>> +# Refer docs/README.kwimage for more details about how-to configure
>> +# and create kirkwood boot image
>> +#
>> +
>> +# Boot Media configurations
>> +BOOT_FROM    spi     # Boot from SPI flash
>> +
>> +DATA 0xFFD10000 0x01111111
>> +DATA 0xFFD10008 0x00001100
>> +DATA 0xFFD100E0 0x1B1B1B1B
>> +DATA 0xFFD20134 0xBBBBBBBB
>> +DATA 0xFFD20138 0x00BBBBBB
>> +DATA 0xFFD20154 0x00000200
>> +DATA 0xFFD2014C 0x00001C00
>> +DATA 0xFFD20148 0x00000001
>> +DATA 0xFFD01400 0x43000400
>> +DATA 0xFFD01404 0x36343000
>> +DATA 0xFFD01408 0x2302544B
>> +DATA 0xFFD0140C 0x00000032
>> +DATA 0xFFD01410 0x0000000D
>> +DATA 0xFFD01414 0x00000000
>> +DATA 0xFFD01418 0x00000000
>> +DATA 0xFFD0141C 0x00000642
>> +DATA 0xFFD01420 0x00000040
>> +DATA 0xFFD01424 0x0000F07F
>> +DATA 0xFFD01504 0x07FFFFF1
>> +DATA 0xFFD01508 0x00000000
>> +DATA 0xFFD0150C 0x00000000
>> +DATA 0xFFD01514 0x00000000
>> +DATA 0xFFD0151C 0x00000000
>> +DATA 0xFFD01494 0x00000000
>> +DATA 0xFFD01498 0x00000000
>> +DATA 0xFFD0149C 0x0000E90F
>> +DATA 0xFFD01480 0x00000001
> 
> It is better to explain each settings here about what exactly you are programming

Ok, I try it.

>> +
>> +# End of Header extension
>> +DATA 0x0 0x0
>> diff --git a/include/configs/km_arm.h b/include/configs/km_arm.h
>> new file mode 100644
>> index 0000000..091e941
>> --- /dev/null
>> +++ b/include/configs/km_arm.h
>> @@ -0,0 +1,191 @@
[...]
>> + * I2C related stuff
>> + */
>> +#undef       CONFIG_HARD_I2C         /* I2C with hardware support */
>> +#define      CONFIG_SOFT_I2C         /* I2C bit-banged       */
>> +
>> +#if defined(CONFIG_HARD_I2C)
>> +#define      CONFIG_I2C_KIRKWOOD
>> +#define      CONFIG_I2C_KW_REG_BASE          KW_TWSI_BASE
>> +#define      CONFIG_SYS_I2C_SLAVE            0x0
>> +#define      CONFIG_SYS_I2C_SPEED            100000
>> +#endif
>> +
>> +#if defined(CONFIG_SOFT_I2C)
>> +#define      CONFIG_KIRKWOOD_GPIO            /* Enable GPIO
>> Support */
>> +#ifndef __ASSEMBLY__
>> +#include <asm/arch-kirkwood/gpio.h>
>> +extern void __set_direction(unsigned pin, int high);
>> +void set_sda (int state);
>> +void set_scl (int state);
>> +int get_sda (void);
>> +int get_scl (void);
>> +#define SUEN3_SDA_PIN        8
>> +#define SUEN3_SCL_PIN        9
>> +#define SUEN3_ENV_WP 38
> 
> Not valid for this board, this patch should explain only about mgcoge2

No, they are valid, because it uses the i2c bitbang driver...
(This file is used by *all* 4 boards ...)

I know the board name mgcoge2_arm_p1a is a little bit
confusing, but this is because this was the first hardware
version of the "suen3" board, which is a part of a hardware,
where also is a powerpc piece named "mgcoge2", and so
the first version was named to mgcoge2_arm_p1a ... the
next hardware revison was named "suen3" ...

>> +
>> +#define I2C_ACTIVE   __set_direction(SUEN3_SDA_PIN, 0)
>> +#define I2C_TRISTATE __set_direction(SUEN3_SDA_PIN, 1)
>> +#define I2C_READ     (kw_gpio_get_value(SUEN3_SDA_PIN) ? 1 : 0)
>> +#define I2C_SDA(bit) kw_gpio_set_value(SUEN3_SDA_PIN, bit);
>> +#define I2C_SCL(bit) kw_gpio_set_value(SUEN3_SCL_PIN, bit);
>> +#endif
>> +
>> +#define I2C_DELAY    udelay(3)       /* 1/4 I2C clock duration */
>> +#define I2C_SOFT_DECLARATIONS
>> +
>> +#define      CONFIG_SYS_I2C_SLAVE            0x0
>> +#define      CONFIG_SYS_I2C_SPEED            100000
>> +#endif
>> +
>> +#define CONFIG_SYS_I2C_EEPROM_ADDR   0x50
>> +#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN       2
>> +
>> +#if defined(CONFIG_SYS_NO_FLASH)
>> +#define CONFIG_KM_UBI_PARTITION_NAME   "ubi0"
>> +#undef       CONFIG_FLASH_CFI_MTD
>> +#undef       CONFIG_JFFS2_CMDLINE
>> +#endif
>> +
>> +#endif /* _CONFIG_KM_ARM_H */
>> diff --git a/include/configs/mgcoge2_arm_p1a.h
>> b/include/configs/mgcoge2_arm_p1a.h
>> new file mode 100644
>> index 0000000..db38915
>> --- /dev/null
>> +++ b/include/configs/mgcoge2_arm_p1a.h
>> @@ -0,0 +1,96 @@
[...]
>> +     ""
>> +
>> +#endif /* _CONFIG_SUEN3_H */
> 
> Wrong comment...

Yep, correct it.

Thanks for reviewing!

bye
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

  reply	other threads:[~2010-02-15  8:07 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-12  8:05 [U-Boot] [PATCH 1/4 v4] arm: add support for the mgcoge2_arm_p1a board from keymile Heiko Schocher
2010-02-13  5:12 ` Prafulla Wadaskar
2010-02-15  8:07   ` Heiko Schocher [this message]
2010-02-17 18:14     ` Prafulla Wadaskar
2010-02-18  6:39       ` Heiko Schocher

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=4B7900B2.1070003@denx.de \
    --to=hs@denx.de \
    --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.