public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Wolfgang Denk <wd@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] powerpc: add support for the Freescale P1022DS reference board
Date: Fri, 21 May 2010 00:33:24 +0200	[thread overview]
Message-ID: <20100520223324.50594CCF026@gemini.denx.de> (raw)
In-Reply-To: <1274392909-16422-1-git-send-email-timur@freescale.com>

Dear Timur Tabi,

In message <1274392909-16422-1-git-send-email-timur@freescale.com> you wrote:
> Add basic suport for the Freescale P1022DS reference board.
> 
> Signed-off-by: Timur Tabi <timur@freescale.com>
> ---
> 
> This patch requires the following two patches to be applied first:
> 
> fsl/85xx: add clkdvdr and pmuxcr2 to global utilities structure definition
> fsl: rename 'dma' to 'brdcfg1' in the ngPIXIS structure
> 
>  Makefile                              |    3 +
>  arch/powerpc/cpu/mpc8xxx/pci_cfg.c    |   26 ++
>  board/freescale/p1022ds/Makefile      |   40 +++
>  board/freescale/p1022ds/config.mk     |   14 +
>  board/freescale/p1022ds/ddr.c         |  108 +++++++
>  board/freescale/p1022ds/law.c         |   27 ++
>  board/freescale/p1022ds/p1022ds.c     |  369 ++++++++++++++++++++++++
>  board/freescale/p1022ds/p1022ds_diu.c |  151 ++++++++++
>  board/freescale/p1022ds/tlb.c         |   76 +++++
>  include/configs/P1022DS.h             |  505 +++++++++++++++++++++++++++++++++
>  10 files changed, 1319 insertions(+), 0 deletions(-)
>  create mode 100644 board/freescale/p1022ds/Makefile
>  create mode 100644 board/freescale/p1022ds/config.mk
>  create mode 100644 board/freescale/p1022ds/ddr.c
>  create mode 100644 board/freescale/p1022ds/law.c
>  create mode 100644 board/freescale/p1022ds/p1022ds.c
>  create mode 100644 board/freescale/p1022ds/p1022ds_diu.c
>  create mode 100644 board/freescale/p1022ds/tlb.c
>  create mode 100644 include/configs/P1022DS.h

Entries to MAKEALL and MAINTAINERS missing.

> diff --git a/Makefile b/Makefile
> index 1445e8b..583a576 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -2493,6 +2493,9 @@ P2020DS_36BIT_config \
>  P2020DS_config:		unconfig
>  	@$(MKCONFIG) -t $(@:_config=) P2020DS powerpc mpc85xx p2020ds freescale
>  
> +P1022DS_config:		unconfig
> +	@$(MKCONFIG) -t $(@:_config=) P1022DS powerpc mpc85xx p1022ds freescale
> +
>  P1011RDB_config	\
>  P1011RDB_NAND_config \
>  P1011RDB_SDCARD_config \

Please keep lists sorted / sort them.

> diff --git a/board/freescale/p1022ds/ddr.c b/board/freescale/p1022ds/ddr.c
> new file mode 100644
> index 0000000..c43c902
> --- /dev/null
> +++ b/board/freescale/p1022ds/ddr.c
...
> +void fsl_ddr_get_spd(ddr3_spd_eeprom_t *ctrl_dimms_spd, unsigned int ctrl_num)
> +{
> +	int ret;
> +
> +	/* The P1022 has only one DDR controller, and the board has only one
> +	   DIMM slot. */

Incorrect multiline comment style.

...
> +/* ranges for parameters:
> + *  wr_data_delay = 0-6
> + *  clk adjust = 0-8
> + *  cpo 2-0x1E (30)
> + */

Incorrect multiline comment style.

> +static const board_specific_parameters_t bsp[] = {
> +/* 	memory controller 0 			*/
> +/*	  lo|  hi|  num|  clk| cpo|wrdata|2T	*/
> +/*	 mhz| mhz|ranks|adjst|    | delay|	*/

Incorrect multiline comment style.

Please fix globally!

> +	{  0, 333,    1,    5,  31,    3,  0},
> +	{334, 400,    1,    5,  31,    3,  0},
> +	{401, 549,    1,    5,  31,    3,  0},
> +	{550, 680,    1,    5,  31,    5,  0},
> +	{681, 850,    1,    5,  31,    5,  0},
> +	{  0, 333,    2,    5,  31,    3,  0},
> +	{334, 400,    2,    5,  31,    3,  0},
> +	{401, 549,    2,    5,  31,    3,  0},
> +	{550, 680,    2,    5,  31,    5,  0},
> +	{681, 850,    2,    5,  31,    5,  0},

Please use TABs for vertical alignment.

> +void fsl_ddr_board_options(memctl_options_t *popts, dimm_params_t *pdimm,
> +			   unsigned int ctrl_num)
> +{
...
> +	/* Per AN4039, enable ZQ calibration. */
> +	popts->zq_en = 1;
> +
> +
> +	/*

Drop one of these empty lines, please.

> +int board_early_init_f(void)
> +{
> +	ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
> +
> +	/* Set pmuxcr to allow both i2c1 and i2c2 */
> +	setbits_be32(&gur->pmuxcr, 0x1000);
> +	in_be32(&gur->pmuxcr);

What is this in_be32() needed for? Either add a comment why it's
needed, or remove it.

...
> +phys_size_t initdram(int board_type)
> +{
> +	phys_size_t dram_size = 0;
> +
> +	puts("Initializing....\n");
> +
> +	dram_size = fsl_ddr_sdram();
> +	dram_size = setup_ddr_tlbs(dram_size / 0x100000);
> +	dram_size *= 0x100000;
> +
> +	puts("    DDR: ");
> +	return dram_size;

How about using get_ram_size() for autosizing / testing?

> +	/*  Enable the TFP410 Encoder (I2C address 0x38)
> +	*/

Please use a symbolic name instead of the hard-wired constant.

> +void pci_init_board(void)
> +{
> +	volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
> +	struct fsl_pci_info pci_info[3];
> +	u32 devdisr, pordevsr, io_sel;
> +	int first_free_busno = 0;
> +	int num = 0;
> +
> +	int pcie_ep, pcie_configured;
> +
> +	devdisr = in_be32(&gur->devdisr);
> +	pordevsr = in_be32(&gur->pordevsr);
> +	io_sel = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 18;
> +
> +	debug ("   pci_init_board: devdisr=%x, io_sel=%x\n", devdisr, io_sel);
> +
> +	if (!(pordevsr & MPC85xx_PORDEVSR_SGMII2_DIS))
> +		printf("    eTSEC2 is in sgmii mode.\n");
> +	if (!(pordevsr & MPC85xx_PORDEVSR_SGMII3_DIS))
> +		printf("    eTSEC3 is in sgmii mode.\n");
> +
> +	puts("\n");

Drop that.

> +#ifdef CONFIG_PCIE2
> +	pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_2, io_sel);
> +
> +	if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE2)) {
> +		SET_STD_PCIE_INFO(pci_info[num], 2);
> +		pcie_ep = fsl_setup_hose(&pcie2_hose, pci_info[num].regs);
> +		printf("    PCIE2 connected to Slot 3 as %s (base addr %lx)\n",
> +				pcie_ep ? "Endpoint" : "Root Complex",
> +				pci_info[num].regs);
> +		first_free_busno = fsl_pci_init_port(&pci_info[num++],
> +					&pcie2_hose, first_free_busno);
> +
> +	} else {
> +		printf("    PCIE2: disabled\n");
> +	}
> +	puts("\n");

Ditto.

> +#else
> +	setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCIE2); /* disable */
> +#endif
> +
> +#ifdef CONFIG_PCIE3
> +	pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_3, io_sel);
> +
> +	if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE3)) {
> +		SET_STD_PCIE_INFO(pci_info[num], 3);
> +		pcie_ep = fsl_setup_hose(&pcie3_hose, pci_info[num].regs);
> +		printf("    PCIE3 connected to Slot 2 as %s (base addr %lx)\n",
> +				pcie_ep ? "Endpoint" : "Root Complex",
> +				pci_info[num].regs);
> +		first_free_busno = fsl_pci_init_port(&pci_info[num++],
> +					&pcie3_hose, first_free_busno);
> +	} else {
> +		printf("    PCIE3: disabled\n");
> +	}
> +	puts("\n");

Ditto.

> +#else
> +	setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCIE3); /* disable */
> +#endif
> +
> +#ifdef CONFIG_PCIE1
> +	pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
> +
> +	if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)) {
> +		SET_STD_PCIE_INFO(pci_info[num], 1);
> +		pcie_ep = fsl_setup_hose(&pcie1_hose, pci_info[num].regs);
> +		printf("    PCIE1 connected to Slot 1 as %s (base addr %lx)\n",
> +				pcie_ep ? "Endpoint" : "Root Complex",
> +				pci_info[num].regs);
> +		first_free_busno = fsl_pci_init_port(&pci_info[num++],
> +					&pcie1_hose, first_free_busno);
> +	} else {
> +		printf("    PCIE1: disabled\n");
> +	}
> +	puts("\n");

Ditto.


Hm... looks as if you were repeating the same code 3 times. Please make
this a function.


> +#ifdef CONFIG_GET_CLK_FROM_ICS307

This CONFIG_GET_CLK_FROM_ICS307 is documented?

> +/* decode S[0-2] to Output Divider (OD) */
> +static u8 ics307_S_to_OD[] = {
> +	10, 2, 8, 4, 5, 7, 3, 6
> +};
> +
> +/* Calculate frequency being generated by ICS307-02 clock chip based upon
> + * the control bytes being programmed into it. */
> +/* XXX: This function should probably go into a common library */
> +static unsigned long ics307_clk_freq(unsigned char cw0, unsigned char cw1,
> +				     unsigned char cw2)
> +{
> +	const unsigned long InputFrequency = CONFIG_ICS307_REFCLK_HZ;
> +	unsigned long VDW = ((cw1 << 1) & 0x1FE) + ((cw2 >> 7) & 1);
> +	unsigned long RDW = cw2 & 0x7F;
> +	unsigned long OD = ics307_S_to_OD[cw0 & 0x7];
> +	unsigned long freq;

Please do not use any CamelCase or UPPER CASE identifiers.

Please fix globally.

> +#ifdef CONFIG_PCIE3
> +	ft_fsl_pci_setup(blob, "pci2", &pcie3_hose);
> +#endif
> +#ifdef CONFIG_PCIE2
> +	ft_fsl_pci_setup(blob, "pci0", &pcie2_hose);
> +#endif
> +#ifdef CONFIG_PCIE1
> +	ft_fsl_pci_setup(blob, "pci1", &pcie1_hose);
> +#endif

Is this intentional? Looks weird to me...

PCIE1 => pci1 => pcie1_hose
PCIE2 => pci0 => pcie2_hose
PCIE3 => pci2 => pcie3_hose

Weird, weird...

> +++ b/board/freescale/p1022ds/p1022ds_diu.c
> @@ -0,0 +1,151 @@

This should probably go to drivers/video/ ?

> + * Copyright 2007-2010 Freescale Semiconductor, Inc.
> + * Authors: York Sun <yorksun@freescale.com>
> + *          Srikanth Srinivasan <srikanth.srinivasan@freescale.com>
> + *          Timur Tabi <timur@freescale.com>
> + *
> + * 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.
> + */
> +
> +#include <common.h>
> +#include <command.h>
> +#include <asm/io.h>
> +
> +#include "../common/ngpixis.h"
> +#include "../common/fsl_diu_fb.h"
> +
> +#if defined(CONFIG_VIDEO) || defined(CONFIG_CFB_CONSOLE)
> +#include <stdio_dev.h>
> +#include <video_fb.h>
> +#endif
> +
> +extern unsigned int FSL_Logo_BMP[];
> +
> +static unsigned int xres, yres;
> +
> +void diu_set_pixel_clock(unsigned int pixclock)
> +{
> +	ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
> +	unsigned long speed_ccb, temp, pixval;
> +
> +	speed_ccb = get_bus_freq(0);
> +	temp = 1000000000UL / pixclock;
> +	temp *= 1000;
> +	pixval = speed_ccb / temp;
> +	debug("DIU pixval = %lu\n", pixval);
> +
> +	/* Modify PXCLK in GUTS CLKDVDR */
> +	debug("DIU: Current value of CLKDVDR = 0x%08x\n", in_be32(&gur->clkdvdr));
> +	clrbits_be32(&gur->clkdvdr, 0xdfff0000);	/* turn off clock */
> +	setbits_be32(&gur->clkdvdr, 0x80000000 | ((pixval & 0x1F) << 16))
> +	debug("DIU: Modified value of CLKDVDR = 0x%08x\n", in_be32(&gur->clkdvdr));
> +}

Hmmm... this looks pretty much similar to
board/freescale/mpc8610hpcd/mpc8610hpcd_diu.c;

I think you should merge these two into one driver.

> +int p1022diu_init_show_bmp(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
> +{
> +	unsigned int addr;

...while doing so, please clean up to use the standard bmp command
instead.

> +U_BOOT_CMD(
> +	diufb, CONFIG_SYS_MAXARGS, 1, p1022diu_init_show_bmp,
> +	"Init or Display BMP file",
> +	"init\n    - initialize DIU\n"
> +	"addr\n    - display bmp at address 'addr'"
> +);

This should go away.

> diff --git a/include/configs/P1022DS.h b/include/configs/P1022DS.h
> new file mode 100644
> index 0000000..65a1265
> --- /dev/null
> +++ b/include/configs/P1022DS.h
...
> +#ifndef __ASSEMBLY__
> +extern unsigned long calculate_board_sys_clk(void);
> +extern unsigned long calculate_board_ddr_clk(void);
> +#endif

Please move to appropriate header file.

> +/*
> + * Base addresses -- Note these are effective addresses where the
> + * actual resources get mapped (not physical addresses)
> + */
> +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000	/* CCSRBAR Default */
> +#define CONFIG_SYS_CCSRBAR		0xffe00000	/* relocated CCSRBAR */
> +#define CONFIG_SYS_CCSRBAR_PHYS		0xfffe00000ull	/* physical addr of CCSRBAR */
> +#define CONFIG_SYS_IMMR			CONFIG_SYS_CCSRBAR	/* PQII uses CONFIG_SYS_IMMR */

Lines too long. Please fix globally.

> +/* ECC will be enabled based on perf_mode environment variable */
> +//#define	CONFIG_DDR_ECC

No C++ comments. Please fix globally.

> +/* video */
> +/* #define CONFIG_VIDEO */

Please do not add dead code. Please fix globally.

> +#define CONFIG_BOOTDELAY 10	/* -1 disables auto-boot */
> +#undef  CONFIG_BOOTARGS		/* the boot command will set bootargs */

Do not undefine what is not defined anyway.

> +#define	CONFIG_EXTRA_ENV_SETTINGS				\
> + "perf_mode=stable\0"			\
> + "memctl_intlv_ctl=2\0"						\
> + "netdev=eth0\0"						\
> + "uboot=" MK_STR(CONFIG_UBOOTPATH) "\0"				\
> + "tftpflash=tftpboot $loadaddr $uboot; "			\
> +	"protect off " MK_STR(TEXT_BASE) " +$filesize; "	\
> +	"erase " MK_STR(TEXT_BASE) " +$filesize; "		\
> +	"cp.b $loadaddr " MK_STR(TEXT_BASE) " $filesize; "	\
> +	"protect on " MK_STR(TEXT_BASE) " +$filesize; "		\
> +	"cmp.b $loadaddr " MK_STR(TEXT_BASE) " $filesize\0"	\

Please indent by TABs only.


Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
It's hard to make a program foolproof because fools are so ingenious.

  reply	other threads:[~2010-05-20 22:33 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-20 22:01 [U-Boot] [PATCH] powerpc: add support for the Freescale P1022DS reference board Timur Tabi
2010-05-20 22:33 ` Wolfgang Denk [this message]
2010-05-20 23:13   ` Kumar Gala
2010-05-21  6:50     ` Wolfgang Denk
2010-05-20 23:23   ` Timur Tabi
2010-05-21  7:07     ` Wolfgang Denk
2010-05-21 13:45       ` Timur Tabi
2010-05-21 14:22         ` Wolfgang Denk
2010-05-21 14:33           ` Timur Tabi
2010-05-21 16:07           ` Timur Tabi
2010-05-26 18:12       ` Timur Tabi
2010-05-26 18:17         ` Scott Wood
2010-05-26 18:19           ` Timur Tabi
2010-05-26 19:04             ` Scott Wood
2010-05-26 19:34               ` Timur Tabi
2010-05-26 19:46                 ` Scott Wood
2010-05-26 21:59                   ` Timur Tabi
2010-05-25 18:30   ` Timur Tabi
2010-05-26 20:10     ` Wolfgang Denk
2010-05-26 20:18       ` Timur Tabi
2010-05-26 20:24       ` Timur Tabi
2010-05-27  7:02         ` Wolfgang Denk
2010-05-27 14:31           ` Timur Tabi
2010-05-27 18:11             ` Wolfgang Denk
2010-05-27 18:25               ` Timur Tabi
2010-05-27 19:03                 ` Scott Wood
2010-05-27 19:07                   ` Timur Tabi
2010-05-27 19:10                     ` Scott Wood
2010-05-27 19:54                       ` Wolfgang Denk
2010-05-27 19:53                     ` Wolfgang Denk
2010-05-27 20:11                       ` Timur Tabi
2010-05-27 21:10                         ` Wolfgang Denk
2010-05-27 19:53                   ` Wolfgang Denk
2010-05-27 20:03                     ` Timur Tabi
2010-05-27 20:59                       ` Wolfgang Denk
2010-05-27 20:05                     ` Scott Wood
2010-05-27 21:03                       ` Wolfgang Denk
2010-05-27 19:45                 ` Wolfgang Denk
2010-05-27 19:54                   ` Timur Tabi
2010-05-27 20:00                     ` Wolfgang Denk
2010-05-27 20:10                       ` Scott Wood
2010-05-21  0:26 ` [U-Boot] [PATCH] powerpc: add support for the FreescaleP1022DS " Liu Dave-R63238
2010-05-21 15:25   ` Timur Tabi
2010-05-21  9:46 ` [U-Boot] [PATCH] powerpc: add support for the Freescale P1022DS " Kumar Gala

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=20100520223324.50594CCF026@gemini.denx.de \
    --to=wd@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox