On Fri, 2013-07-26 at 12:02 +0200, Valentin Longchamp wrote:
> This patch introduces the support for Keymile's kmp204x reference
> design. This design is based on Freescale's P2040/P2041 SoC.
> 
> The peripherals used by this design are:
> - DDR3 RAM with SPD support
> - SPI NOR Flash as boot medium
> - NAND Flash
> - 2 PCIe busses (hosts 1 and 3)
> - 3 FMAN Ethernet devices (FMAN1 DTSEC1/2/5)
> - 3 Local Bus windows, with one dedicated to the QRIO reset/power mgmt
>   FPGA
> - 2 HW I2C busses
> - last but not least, the mandatory serial port
> 
> The board/keymile/kmp204x code is mostly based on Freescale's P2041rdb
> support and was changed according to our design (that means essentially
> removing what is not present on the designs and a few adaptations).

A lot of the copied files have had Freescale copyrights removed...  Also
please try to factor shared code out rather than duplicate, where
practical.

> 
> There is currently only one prototype board that is based on this design
> and this patch also introduces it. The board is called kmlion1.
> 
> Signed-off-by: Stefan Bigler <stefan.big...@keymile.com>
> Signed-off-by: Valentin Longchamp <valentin.longch...@keymile.com>
> ---
>  MAINTAINERS                           |   1 +
>  board/keymile/common/common.c         |   4 +-
>  board/keymile/kmp204x/Makefile        |  48 ++++
>  board/keymile/kmp204x/ddr.c           |  84 +++++++
>  board/keymile/kmp204x/eth.c           |  87 +++++++
>  board/keymile/kmp204x/kmp204x.c       | 307 ++++++++++++++++++++++
>  board/keymile/kmp204x/kmp204x.h       |  31 +++
>  board/keymile/kmp204x/law.c           |  51 ++++
>  board/keymile/kmp204x/pbi.cfg         |  51 ++++
>  board/keymile/kmp204x/pci.c           |  49 ++++
>  board/keymile/kmp204x/rcw_kmp204x.cfg |  11 +
>  board/keymile/kmp204x/tlb.c           | 122 +++++++++
>  boards.cfg                            |   1 +
>  include/configs/km/kmp204x-common.h   | 462 
> ++++++++++++++++++++++++++++++++++
>  include/configs/kmp204x.h             |  84 +++++++
>  15 files changed, 1392 insertions(+), 1 deletion(-)
>  create mode 100644 board/keymile/kmp204x/Makefile
>  create mode 100644 board/keymile/kmp204x/ddr.c
>  create mode 100644 board/keymile/kmp204x/eth.c
>  create mode 100644 board/keymile/kmp204x/kmp204x.c
>  create mode 100644 board/keymile/kmp204x/kmp204x.h
>  create mode 100644 board/keymile/kmp204x/law.c
>  create mode 100644 board/keymile/kmp204x/pbi.cfg
>  create mode 100644 board/keymile/kmp204x/pci.c
>  create mode 100644 board/keymile/kmp204x/rcw_kmp204x.cfg
>  create mode 100644 board/keymile/kmp204x/tlb.c
>  create mode 100644 include/configs/km/kmp204x-common.h
>  create mode 100644 include/configs/kmp204x.h
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 081cf96..fff77f0 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -778,6 +778,7 @@ Valentin Longchamp <valentin.longch...@keymile.com>
>       mgcoge3un       ARM926EJS (Kirkwood SoC)
>       kmcoge5un       ARM926EJS (Kirkwood SoC)
>       portl2          ARM926EJS (Kirkwood SoC)
> +     kmcoge4         MPC85xx (P2041 SoC)
>  
>  Nishanth Menon <n...@ti.com>
>  
> diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c
> index ef93ed3..ca833db 100644
> --- a/board/keymile/common/common.c
> +++ b/board/keymile/common/common.c
> @@ -94,7 +94,7 @@ int set_km_env(void)
>  }
>  
>  #if defined(CONFIG_SYS_I2C_INIT_BOARD)
> -#if !defined(CONFIG_MPC83xx)
> +#if !defined(CONFIG_MPC83xx) && !defined(CONFIG_PPC_P2041)

Perhaps you should check for when you do want to run this code, rather
than when you don't.

>  static void i2c_write_start_seq(void)
>  {
>       set_sda(1);
> @@ -183,6 +183,7 @@ void i2c_init_board(void)
>  }
>  #endif
>  
> +#ifndef CONFIG_KMP204X
>  int board_eth_init(bd_t *bis)

Likewise.

> +/* TODO: implement the I2C functions */
> +void i2c_write_start_seq(void){
> +     return;
> +}

Opening brace goes on its own line for function definitions.

> +     if (en)
> +             prst &= ~(1<<bit);
> +     else
> +             prst |= (1<<bit);

Spaces around binary operators such as <<

> +#ifdef CONFIG_SYS_NAND_BASE_PHYS
> +     SET_LAW(CONFIG_SYS_NAND_BASE_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_LBC),
> +#endif

The NAND window is 8K.  There's no reason for the LAW to be more than
the minimum 32K.

> diff --git a/board/keymile/kmp204x/tlb.c b/board/keymile/kmp204x/tlb.c
> new file mode 100644
> index 0000000..5bbefd5
> --- /dev/null
> +++ b/board/keymile/kmp204x/tlb.c
> @@ -0,0 +1,122 @@
> +/*
> + * (C) Copyright 2013 Keymile AG
> + * Valentin Longchamp <valentin.longch...@keymile.com>
> + *
> + * 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
> + */
> +
> +#include <common.h>
> +#include <asm/mmu.h>
> +
> +struct fsl_e_tlb_entry tlb_table[] = {
> +     /* TLB 0 - for temp stack in cache */
> +     SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR,
> +                   CONFIG_SYS_INIT_RAM_ADDR_PHYS,
> +                   MAS3_SW|MAS3_SR, 0,
> +                   0, 0, BOOKE_PAGESZ_4K, 0),
> +     SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 4 * 1024,
> +                   CONFIG_SYS_INIT_RAM_ADDR_PHYS + 4 * 1024,
> +                   MAS3_SW|MAS3_SR, 0,
> +                   0, 0, BOOKE_PAGESZ_4K, 0),
> +     SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 8 * 1024,
> +                   CONFIG_SYS_INIT_RAM_ADDR_PHYS + 8 * 1024,
> +                   MAS3_SW|MAS3_SR, 0,
> +                   0, 0, BOOKE_PAGESZ_4K, 0),
> +     SET_TLB_ENTRY(0, CONFIG_SYS_INIT_RAM_ADDR + 12 * 1024,
> +                   CONFIG_SYS_INIT_RAM_ADDR_PHYS + 12 * 1024,
> +                   MAS3_SW|MAS3_SR, 0,
> +                   0, 0, BOOKE_PAGESZ_4K, 0),
> +     /* TLB 1 */
> +     /* *I*** - Covers boot page */
> +     /* *I*G - L3SRAM. When L3 is used as 1M SRAM, the address of the
> +      * SRAM is at 0xfff00000, it covered the 0xfffff000.
> +      */
> +     SET_TLB_ENTRY(1, CONFIG_SYS_INIT_L3_ADDR, CONFIG_SYS_INIT_L3_ADDR,
> +                   MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
> +                   0, 0, BOOKE_PAGESZ_1M, 1),

What does that "covers boot page" comment refer to?

Why is L3SRAM I+G?

> +#ifdef CONFIG_SYS_NAND_BASE
> +     /*
> +      * *I*G - NAND
> +      * entry 14 and 15 has been used hard coded, they will be disabled
> +      * in cpu_init_f, so we use entry 16 for nand.
> +      */
> +     SET_TLB_ENTRY(1, CONFIG_SYS_NAND_BASE, CONFIG_SYS_NAND_BASE_PHYS,
> +                   MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
> +                   0, 16, BOOKE_PAGESZ_1M, 1),
> +#endif

Again, NAND is an 8K window.  Don't set MAS3_SX.

> +};
> +
> +int num_tlb_entries = ARRAY_SIZE(tlb_table);
> diff --git a/boards.cfg b/boards.cfg
> index 6a368de..b818f1e 100644
> --- a/boards.cfg
> +++ b/boards.cfg
> @@ -744,6 +744,7 @@ tuge1                        powerpc     mpc83xx     
> km83xx              keymile
>  tuxx1                        powerpc     mpc83xx     km83xx              
> keymile        -           tuxx1:TUXX1
>  kmopti2                      powerpc     mpc83xx     km83xx              
> keymile        -           tuxx1:KMOPTI2
>  kmsupx5                      powerpc     mpc83xx     km83xx              
> keymile        -           tuxx1:KMSUPX5
> +kmlion1                      powerpc     mpc85xx     kmp204x             
> keymile        -           kmp204x:KMLION1

Is it kmlion1 or km204x?  The target name should match what the board
prints out on boot.

> +#define CONFIG_SYS_NAND_BASE_LIST     {CONFIG_SYS_NAND_BASE}
> +#define CONFIG_SYS_MAX_NAND_DEVICE   1
> +#define CONFIG_MTD_NAND_VERIFY_WRITE
> +#define CONFIG_CMD_NAND
> +#define CONFIG_SYS_NAND_BLOCK_SIZE    (128 * 1024)
> +
> +#define CONFIG_NAND_ECC_BCH
> +#define CONFIG_BCH
>
> +/* NAND flash config */
> +#define CONFIG_SYS_NAND_BR_PRELIM  (BR_PHYS_ADDR(CONFIG_SYS_NAND_BASE_PHYS) \
> +                            | BR_PS_8               /* Port Size = 8 bit */ \
> +                            | BR_MS_FCM             /* MSEL = FCM */ \
> +                            | BR_V)                 /* valid */
> +
> +#define CONFIG_SYS_NAND_OR_PRELIM  (OR_AM_256KB            /* length 256K */ 
> \
> +                            | OR_FCM_BCTLD   /* LBCTL not ass */     \
> +                            | OR_FCM_SCY_1   /* 1 clk wait cycle */  \
> +                            | OR_FCM_RST     /* 1 clk read setup */  \
> +                            | OR_FCM_PGS     /* Large Page 128k */   \
> +                            | OR_FCM_CST)    /* 0.25 command setup */

What does "large page 128k" mean?  128k is the block size, not the page
size.

-Scott



_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to