
Hello Heiko,
Le 06/07/2017 à 12:10, Heiko Schocher a écrit :
Hello Christophe,
Am 06.07.2017 um 10:39 schrieb Christophe Leroy:
CS Systemes d'Information (CSSI) manufactures two boards, named MCR3000 and CMPC885 which are respectively based on MPC866 and MPC885 processors.
This patch adds support for the first board.
Signed-off-by: Christophe Leroy christophe.leroy@c-s.fr
Applies after the v2 serie 'powerpc, 8xx: Modernise the 8xx'
.travis.yml | 2 + arch/powerpc/cpu/mpc8xx/Kconfig | 5 + board/cssi/MAINTAINERS | 6 + board/cssi/MCR3000/Kconfig | 15 ++ board/cssi/MCR3000/MCR3000.c | 316 ++++++++++++++++++++++++++++++++++++++++ board/cssi/MCR3000/Makefile | 10 ++ board/cssi/MCR3000/nand.c | 65 +++++++++ board/cssi/MCR3000/u-boot.lds | 91 ++++++++++++ configs/MCR3000_defconfig | 81 ++++++++++ drivers/net/mpc8xx_fec.c | 20 +++ include/configs/MCR3000.h | 240 ++++++++++++++++++++++++++++++ 11 files changed, 851 insertions(+) create mode 100644 board/cssi/MAINTAINERS create mode 100644 board/cssi/MCR3000/Kconfig create mode 100644 board/cssi/MCR3000/MCR3000.c create mode 100644 board/cssi/MCR3000/Makefile create mode 100644 board/cssi/MCR3000/nand.c create mode 100644 board/cssi/MCR3000/u-boot.lds create mode 100644 configs/MCR3000_defconfig create mode 100644 include/configs/MCR3000.h
Reviewed-by: Heiko Schocher hs@denx.de
nitpicks only:
diff --git a/.travis.yml b/.travis.yml index 6f14ec2396..226c8313b1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -210,6 +210,8 @@ matrix: - env: - BUILDMAN="mpc86xx" - env:
- BUILDMAN="mpc8xx"
- env:
- BUILDMAN="siemens"
- env:
- BUILDMAN="tegra"
Can you give us a link, where you tried it on travis ?
https://travis-ci.org/chleroy/uboot/builds/250339570?utm_source=email&ut...
[...]
diff --git a/board/cssi/MCR3000/MCR3000.c b/board/cssi/MCR3000/MCR3000.c new file mode 100644 index 0000000000..a84633a669 --- /dev/null +++ b/board/cssi/MCR3000/MCR3000.c @@ -0,0 +1,316 @@ +/*
- Copyright (C) 2010-2017 CS Systemes d'Information
- Florent Trinh Thai florent.trinh-thai@c-s.fr
- Christophe Leroy christophe.leroy@c-s.fr
- Board specific routines for the MCR3000 board
- initialisation
- memory controller
- serial io initialisation
- ethernet io initialisation
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <common.h> +#include <hwconfig.h> +#include <mpc8xx.h> +#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) +#include <libfdt.h> +#endif +#include <asm/io.h>
+DECLARE_GLOBAL_DATA_PTR;
+/*
- constant
- */
+static const uint cs1_dram_table_66[] = {
- /* DRAM - single read. (offset 0 in upm RAM) */
- 0x0F3DFC04, 0x0FEFBC04, 0x00BE7804, 0x0FFDF400,
- 0x1FFFFC05, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
- /* DRAM - burst read. (offset 8 in upm RAM) */
- 0x0F3DFC04, 0x0FEFBC04, 0x00BF7C04, 0x00FFFC00,
- 0x00FFFC00, 0x00FEF800, 0x0FFDF400, 0x1FFFFC05,
- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
- /* DRAM - single write. (offset 18 in upm RAM) */
- 0x0F3DFC04, 0x0FEFB800, 0x00BF7404, 0x0FFEF804,
- 0x0FFDF404, 0x1FFFFC05, 0xFFFFFFFF, 0xFFFFFFFF,
- /* DRAM - burst write. (offset 20 in upm RAM) */
- 0x0F3DFC04, 0x0FEFB800, 0x00BF7400, 0x00FFFC00,
- 0x00FFFC00, 0x00FFFC04, 0x0FFEF804, 0x0FFDF404,
- 0x1FFFFC05, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
- /* refresh (offset 30 in upm RAM) */
- 0x0FFDF404, 0x0FFEBC04, 0x0FFD7C84, 0x0FFFFC04,
- 0x0FFFFC04, 0x0FFFFC04, 0x1FFFFC85, 0xFFFFFFFF,
- /* init */
- 0x0FEEB874, 0x0FBD7474, 0x1FFFFC45, 0xFFFFFFFF,
- /* exception. (offset 3c in upm RAM) */
- 0xFFFFFC05, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+};
+/*
- Device Tree Support
- */
+#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) +static int fdt_set_node_and_value(void *blob, char *nodename, char *regname,
void *var, int size)
+{
May we move this function to a common place, as I think others can reuse it also?
Ok, I add it in my TODO list. My second board will use it too.
- int ret = 0;
- int nodeoffset = 0;
- nodeoffset = fdt_path_offset(blob, nodename);
- if (nodeoffset >= 0) {
ret = fdt_setprop(blob, nodeoffset, regname, var, size);
if (ret < 0)
printf("ft_blob_update(): cannot set %s/%s property; err:
%s\n",
wrong text "ft_blob_update()" the functions name is fdt_set_node_and_value().
Ok
nodename, regname, fdt_strerror(ret));
- } else {
printf("ft_blob_update(): cannot find %s node err:%s\n",
nodename, fdt_strerror(nodeoffset));
- }
- return ret;
+}
+/*
- update "brg" property in the blob
- */
+static void ft_blob_update(void *blob, bd_t *bd) +{
- uchar enetaddr[6];
- __be32 brg_data = cpu_to_be32(bd->bi_busfreq);
- /* BRG */
- fdt_set_node_and_value(blob, "/soc/cpm", "brg-frequency", &brg_data,
sizeof(brg_data));
- /* MAC addr */
- if (eth_getenv_enetaddr("ethaddr", enetaddr))
fdt_set_node_and_value(blob, "ethernet0", "local-mac-address",
enetaddr, sizeof(u8) * 6);
- /* Bus Frequency for CPM */
- fdt_set_node_and_value(blob, "/soc", "bus-frequency",
&bd->bi_busfreq,
sizeof(u32));
+}
Hmm... seems also a common functionality for me, or? May its better places in arch/powerpc/cpu/mpc8xx/fdt.c ft_cpu_setup()
Ok, I add it in my TODO list.
+static void ft_e1_setup(void *blob) +{
- ulong data_rate = 2;
- ulong channel_phase = 0;
- char *sync = "receive";
- /* Set data rate */
- fdt_set_node_and_value(blob, "/localbus/e1-wan", "data-rate",
&data_rate, sizeof(u32));
- /* Set channel phase to 0 */
- fdt_set_node_and_value(blob, "/localbus/e1-wan", "channel-phase",
&channel_phase, sizeof(u32));
- /* rising edge sync pulse transmit */
- fdt_set_node_and_value(blob, "/localbus/e1-wan",
"rising-edge-sync-pulse", sync,
sizeof(u8) * strlen(sync));
+}
+void ft_board_setup(void *blob, bd_t *bd) +{
- ft_cpu_setup(blob, bd);
- ft_blob_update(blob, bd);
- ft_e1_setup(blob);
+} +#endif /* defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) */
+/*
- Check Board Identity:
- */
+int checkboard(void) +{
- serial_puts("BOARD: MCR3000 CSSI\n");
- return 0;
+}
+/*
- Initialize SDRAM
- */
+int dram_init(void) +{
- immap_t __iomem *immap = (immap_t __iomem *)CONFIG_SYS_IMMR;
- memctl8xx_t __iomem *memctl = &immap->im_memctl;
- printf("UPMA init for SDRAM (CAS latency 2), ");
- printf("init address 0x%08x, size ", (int)dram_init);
- /* Configure UPMA for cs1 */
- upmconfig(UPMA, (uint *)cs1_dram_table_66,
sizeof(cs1_dram_table_66) / sizeof(uint));
- udelay(10);
- out_be16(&memctl->memc_mptpr, 0x0200);
- out_be32(&memctl->memc_mamr, 0x14904000);
- udelay(10);
- out_be32(&memctl->memc_or1, CONFIG_SYS_OR1_PRELIM);
- out_be32(&memctl->memc_br1, CONFIG_SYS_BR1_PRELIM);
- udelay(10);
- out_be32(&memctl->memc_mcr, 0x80002830);
- out_be32(&memctl->memc_mar, 0x00000088);
- out_be32(&memctl->memc_mcr, 0x80002038);
- udelay(200);
- gd->ram_size = get_ram_size((long *)CONFIG_SYS_SDRAM_BASE,
SDRAM_MAX_SIZE);
- return 0;
+}
+/*
- Miscelaneous init
- */
+#define ADDR_CPLD_R_ETAT ((unsigned short *)0x10000806) +#define R_ID_CPLD_MASK 0xFF00
+#define ADDR_FLASH_ENV_AREA ((unsigned short *)0x04040000)
+struct environment {
- uint32_t crc;
- uint8_t data[];
+};
+#define LEN_STR 80
+int misc_init_r(void) +{
- immap_t __iomem *immr = (immap_t __iomem *)CONFIG_SYS_IMMR;
- iop8xx_t __iomem *iop = &immr->im_ioport;
- char str[LEN_STR];
- char s_ethaddr[LEN_STR];
- char s_id_cpld[LEN_STR];
- char s_num_serie[LEN_STR];
- char s_password[LEN_STR];
- unsigned short version_cpld;
- struct environment *env;
- uint32_t crc;
- char *s;
- int i, j;
- /* --------------------------------------------
* GPIO or per. Function
* PCPAR[13] = 0 [0x0004] -> GPIO: (BTN_ACQ_AL)
* -------------------------------------------- */
- clrsetbits_be16(&iop->iop_pcpar, 0, 0x4);
- /* ----------------------------------------------
* In/Out or per. Function 0/1
* PCDIR[13] = 1 [0x0004] -> GPIO: IN (CS_POT1_5V)
* ---------------------------------------------- */
- clrsetbits_be16(&iop->iop_pcdir, 0, 0x4);
- /* if BTN_ACQ_IN is pressed then bootdelay is changed to 60
second */
- if ((in_be16(&iop->iop_pcdat) & 0x0004) == 0)
setenv("bootdelay", "60");
- /* verifying environment variable area */
- env = (struct environment *)CONFIG_ENV_ADDR;
- crc = crc32(0, env->data, (CONFIG_ENV_SIZE - sizeof(uint32_t)));
What do you do here?
On this board, there is no EEPROM to store the Ethernet Address and other vital information (serial number, password, CPLD version), therefore when U-boot is upgraded (from Linux), the ETHERNET address is writen in RAW text format in the environment area, so that at next restart, U-boot includes it when it restores the default environment.
- if (crc != env->crc) {
/* It can be an update request */
for (i = 0; i < 8; i++) {
str[i] = *(((uint8_t *)CONFIG_ENV_ADDR) + i);
str[(i+1)] = 0;
}
if (strcmp(str, "ETHADDR=") == 0) {
/* getting saved value */
i = 0;
for (j = 0; j < 4; j++) {
while (*(((uint8_t *)CONFIG_ENV_ADDR) + i) !=
'=')
i++;
switch (j) {
case 0:
s = s_ethaddr; break;
checkpatch does not complain, but I think, we write the "break;" in the next line ...
Ok
case 1:
s = s_num_serie; break;
case 2:
s = s_id_cpld; break;
case 3:
s = s_password; break;
}
do {
i++;
*s = *(((uint8_t *)CONFIG_ENV_ADDR) + i);
s++;
} while (*(((uint8_t *)CONFIG_ENV_ADDR) + i)
!= 0x00);
}
/* creating or updating environment variable */
if (s_ethaddr[0] != 0x00)
setenv("ethaddr", s_ethaddr);
if (s_num_serie[0] != 0x00)
setenv("num_serie", s_num_serie);
if (s_id_cpld[0] != 0x00)
setenv("id_cpld", s_id_cpld);
if (s_password[0] != 0x00)
setenv("password", s_password);
saveenv();
}
- }
- /* we do not modify environment variable area if CRC is false */
- crc = crc32(0, env->data, (CONFIG_ENV_SIZE - sizeof(uint32_t)));
- if (crc == env->crc) {
/* getting version value in CPLD register */
for (i = 0; i < LEN_STR; i++)
str[i] = 0;
version_cpld = *ADDR_CPLD_R_ETAT & R_ID_CPLD_MASK;
if (((version_cpld >> 12) & 0x000f) < 0x000a)
str[0] = ((version_cpld >> 12) & 0x000f) + 0x30;
else
str[0] = (((version_cpld >> 12) & 0x000f) - 0x000a) +
0x41;
if (((version_cpld >> 8) & 0x000f) < 0x000a)
str[1] = ((version_cpld >> 8) & 0x000f) + 0x30;
else
str[1] = (((version_cpld >> 8) & 0x000f) - 0x000a) +
0x41;
str[2] = 0x30;
str[3] = 0x30;
/* updating "id_cpld" variable if not corresponding */
s = getenv("id_cpld");
if ((s == NULL) || (strcmp(s, str) != 0)) {
setenv("id_cpld", str);
saveenv();
}
- }
Sorry, I do not understand, what you are doing here ...
There is a CPLD on the board. This piece of code reads the FW version in the component and stores it in the environment in a variable named 'id_cpld'.
- return 0;
+}
+int board_early_init_f(void) +{
- immap_t __iomem *immr = (immap_t __iomem *)CONFIG_SYS_IMMR;
- /*
* Erase FPGA(s) for reboot
*/
- clrbits_be32(&immr->im_cpm.cp_pbdat, 0x00020000); /* PROGFPGA
down */
- setbits_be32(&immr->im_cpm.cp_pbdir, 0x00020000); /* PROGFPGA
output */
- udelay(1); /* Wait more than 300ns */
- setbits_be32(&immr->im_cpm.cp_pbdat, 0x00020000); /* PROGFPGA up */
- return 0;
+} diff --git a/board/cssi/MCR3000/Makefile b/board/cssi/MCR3000/Makefile new file mode 100644 index 0000000000..401d5aa4c1 --- /dev/null +++ b/board/cssi/MCR3000/Makefile @@ -0,0 +1,10 @@ +# +# Copyright (C) 2010-2017 CS Systemes d'Information +# Christophe Leroy christophe.leroy@c-s.fr +# +# SPDX-License-Identifier: GPL-2.0+ +# +#
+obj-y += MCR3000.o +obj-$(CONFIG_CMD_NAND) += nand.o diff --git a/board/cssi/MCR3000/nand.c b/board/cssi/MCR3000/nand.c new file mode 100644 index 0000000000..8e5b0d0618 --- /dev/null +++ b/board/cssi/MCR3000/nand.c @@ -0,0 +1,65 @@ +/*
- Copyright (C) 2010-2017 CS Systemes d'Information
- Florent Trinh Thai florent.trinh-thai@c-s.fr
- Christophe Leroy christophe.leroy@c-s.fr
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <config.h> +#include <common.h> +#include <nand.h> +#include <asm/io.h>
+#define BIT_CLE ((unsigned short)0x0800) +#define BIT_ALE ((unsigned short)0x0400) +#define BIT_NCE ((unsigned short)0x1000)
+static void nand_hwcontrol(struct mtd_info *mtdinfo, int cmd, unsigned int ctrl) +{
- struct nand_chip *this = mtdinfo->priv;
- immap_t __iomem *immr = (immap_t __iomem *)CONFIG_SYS_IMMR;
- unsigned short pddat = 0;
- /* The hardware control change */
- if (ctrl & NAND_CTRL_CHANGE) {
pddat = in_be16(&immr->im_ioport.iop_pddat);
/* Clearing ALE and CLE */
pddat &= ~(BIT_CLE | BIT_ALE);
/* Driving NCE pin */
if (ctrl & NAND_NCE)
pddat &= ~BIT_NCE;
else
pddat |= BIT_NCE;
/* Driving CLE and ALE pin */
if (ctrl & NAND_CLE)
pddat |= BIT_CLE;
if (ctrl & NAND_ALE)
pddat |= BIT_ALE;
out_be16(&immr->im_ioport.iop_pddat, pddat);
- }
- /* Writing the command */
- if (cmd != NAND_CMD_NONE)
out_8(this->IO_ADDR_W, cmd);
+}
+int board_nand_init(struct nand_chip *nand) +{
- immap_t __iomem *immr = (immap_t __iomem *)CONFIG_SYS_IMMR;
- /* Set GPIO Port */
- setbits_be16(&immr->im_ioport.iop_pddir, 0x1c00);
- clrbits_be16(&immr->im_ioport.iop_pdpar, 0x1c00);
- clrsetbits_be16(&immr->im_ioport.iop_pddat, 0x0c00, 0x1000);
- nand->chip_delay = 60;
- nand->ecc.mode = NAND_ECC_SOFT;
- nand->cmd_ctrl = nand_hwcontrol;
- return 0;
+} diff --git a/board/cssi/MCR3000/u-boot.lds b/board/cssi/MCR3000/u-boot.lds new file mode 100644 index 0000000000..2234bd8d1d --- /dev/null +++ b/board/cssi/MCR3000/u-boot.lds
I wonder why you need a board specific lds file?
Don't know, it was like this for other 8xx boards.
How should it be done indeed ?
@@ -0,0 +1,91 @@ +/*
- Copyright (C) 2010-2017 CS Systemes d'Information
- Christophe Leroy christophe.leroy@c-s.fr
- (C) Copyright 2001-2003
- Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- Modified by Yuli Barcohen yuli@arabellasw.com
- SPDX-License-Identifier: GPL-2.0+
- */
+OUTPUT_ARCH(powerpc) +SECTIONS +{
- /* Read-only sections, merged into text segment: */
- . = + SIZEOF_HEADERS;
- .text :
- {
- arch/powerpc/cpu/mpc8xx/start.o (.text)
- arch/powerpc/cpu/mpc8xx/start.o (.text*)
- arch/powerpc/cpu/mpc8xx/traps.o (.text*)
- arch/powerpc/cpu/mpc8xx/built-in.o (.text*)
- arch/powerpc/lib/built-in.o (.text*)
- board/cssi/MCR3000/built-in.o (.text*)
- disk/built-in.o (.text*)
- drivers/net/built-in.o (.text*)
- *(.text)
- }
- _etext = .;
- PROVIDE (etext = .);
- .rodata :
- {
- *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
- }
- /* Read-write section, merged into data segment: */
- . = (. + 0x0FFF) & 0xFFFFF000;
- _erotext = .;
- PROVIDE (erotext = .);
- .reloc :
- {
- _GOT2_TABLE_ = .;
- KEEP(*(.got2))
- KEEP(*(.got))
- _FIXUP_TABLE_ = .;
- KEEP(*(.fixup))
- }
- __got2_entries = ((_GLOBAL_OFFSET_TABLE_ - _GOT2_TABLE_) >> 2) - 1;
- __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
- .data :
- {
- *(.data*)
- *(.sdata*)
- }
- _edata = .;
- PROVIDE (edata = .);
- . = .;
- . = ALIGN(4);
- .u_boot_list : {
KEEP(*(SORT(.u_boot_list*)));
- }
- . = .;
- __start___ex_table = .;
- __ex_table : { *(__ex_table) }
- __stop___ex_table = .;
- . = ALIGN(4096);
- __init_begin = .;
- .text.init : { *(.text.init) }
- .data.init : { *(.data.init) }
- . = ALIGN(4096);
- __init_end = .;
- __bss_start = .;
- .bss (NOLOAD) :
- {
- *(.bss*)
- *(.sbss*)
- *(COMMON)
- . = ALIGN(4);
- }
- __bss_end = . ;
- PROVIDE (end = .);
+} +ENTRY(_start) diff --git a/configs/MCR3000_defconfig b/configs/MCR3000_defconfig new file mode 100644 index 0000000000..f8120f4a0a --- /dev/null +++ b/configs/MCR3000_defconfig @@ -0,0 +1,81 @@ +CONFIG_PPC=y +CONFIG_8xx=y +CONFIG_TARGET_MCR3000=y +CONFIG_BOOTDELAY=5 +CONFIG_HUSH_PARSER=y +# CONFIG_CMD_SETEXPR is not set +CONFIG_CMD_NET=y +CONFIG_CMD_DHCP=y +# CONFIG_LED_STATUS_BOARD_SPECIFIC is not set +# CONFIG_MMC is not set +CONFIG_MTD_NOR_FLASH=y +# CONFIG_PCI is not set +CONFIG_OF_LIBFDT=y +CONFIG_SYS_PROMPT="S3K> " +CONFIG_NETDEVICES=y +CONFIG_MPC8XX_FEC=y
+CONFIG_CMD_SAVEENV=y +CONFIG_CMD_FLASH=y +CONFIG_CMD_MII=y +CONFIG_CMD_PING=y +CONFIG_CMD_ASKENV=y +CONFIG_CMD_REGINFO=y +CONFIG_CMD_MTDPARTS=y +CONFIG_CMD_NAND=y +# CONFIG_CMD_BDI is not set +# CONFIG_CMD_ECHO is not set +# CONFIG_CMD_FPGA is not set +# CONFIG_CMD_IMI is not set +# CONFIG_CMD_IMLS is not set +# CONFIG_CMD_ITEST is not set +# CONFIG_CMD_CONSOLE is not set +# CONFIG_CMD_LOADB is not set +# CONFIG_CMD_LOADS is not set +# CONFIG_CMD_MD5SUM is not set +# CONFIG_CMD_MISC is not set +# CONFIG_CMD_SETGETDCR is not set +# CONFIG_CMD_SHA1 is not set +# CONFIG_CMD_SOURCE is not set +CONFIG_CMD_IMMAP=y
+CONFIG_SYS_IMMR=0xFF000000
+CONFIG_SYS_OR0_PRELIM=0xFFC00926 +CONFIG_SYS_BR0_PRELIM=0x04000801 +CONFIG_SYS_BR1_PRELIM_BOOL=y +CONFIG_SYS_BR1_PRELIM=0x00000081 +CONFIG_SYS_OR1_PRELIM=0xFE000E00 +CONFIG_SYS_BR2_PRELIM_BOOL=y +CONFIG_SYS_BR2_PRELIM=0x08000801 +CONFIG_SYS_OR2_PRELIM=0xFFFF8F2A +CONFIG_SYS_BR3_PRELIM_BOOL=y +CONFIG_SYS_BR3_PRELIM=0x0C000401 +CONFIG_SYS_OR3_PRELIM=0xFFFF8142 +CONFIG_SYS_BR4_PRELIM_BOOL=y +CONFIG_SYS_BR4_PRELIM=0x10000801 +CONFIG_SYS_OR4_PRELIM=0xFFFF8D08 +CONFIG_SYS_BR5_PRELIM_BOOL=y +CONFIG_SYS_BR5_PRELIM=0x14000801 +CONFIG_SYS_OR5_PRELIM=0xFFFF8916 +CONFIG_SYS_BR6_PRELIM_BOOL=y +CONFIG_SYS_BR6_PRELIM=0x18000801 +CONFIG_SYS_OR6_PRELIM=0xFFFF0908 +CONFIG_SYS_BR7_PRELIM_BOOL=y +CONFIG_SYS_BR7_PRELIM=0x1C000001 +CONFIG_SYS_OR7_PRELIM=0xFFFF810A
+CONFIG_8xx_GCLK_FREQ=132000000
+CONFIG_SYS_SYPCR=0xFFFFFF8F +CONFIG_SYS_SIUMCR=0x00600400 +CONFIG_SYS_TBSCR=0x00C3 +CONFIG_SYS_PISCR=0x0000 +CONFIG_SYS_PLPRCR_BOOL=y +CONFIG_SYS_PLPRCR=0x00460004 +CONFIG_SYS_SCCR_MASK=0x60000000 +CONFIG_SYS_SCCR=0x00C20000 +CONFIG_SYS_DER=0x2002000F
diff --git a/drivers/net/mpc8xx_fec.c b/drivers/net/mpc8xx_fec.c index b070d6696a..e525d3b593 100644 --- a/drivers/net/mpc8xx_fec.c +++ b/drivers/net/mpc8xx_fec.c @@ -413,6 +413,26 @@ static void fec_pin_init(int fecidx) */ out_be16(&immr->im_ioport.iop_pdpar, 0x1fff); out_be16(&immr->im_ioport.iop_pddir, 0x1fff);
+#if defined(CONFIG_TARGET_MCR3000)
out_be16(&immr->im_ioport.iop_papar, 0xBBFF);
out_be16(&immr->im_ioport.iop_padir, 0x04F0);
out_be16(&immr->im_ioport.iop_paodr, 0x0000);
out_be32(&immr->im_cpm.cp_pbpar, 0x000133FF);
out_be32(&immr->im_cpm.cp_pbdir, 0x0003BF0F);
out_be16(&immr->im_cpm.cp_pbodr, 0x0000);
out_be16(&immr->im_ioport.iop_pcpar, 0x0400);
out_be16(&immr->im_ioport.iop_pcdir, 0x0080);
out_be16(&immr->im_ioport.iop_pcso , 0x0D53);
out_be16(&immr->im_ioport.iop_pcint, 0x0000);
out_be16(&immr->im_ioport.iop_pdpar, 0x03FE);
out_be16(&immr->im_ioport.iop_pddir, 0x1C09);
setbits_be32(&immr->im_ioport.utmode, 0x80);
+#endif #endif
#endif /* CONFIG_ETHER_ON_FEC1 */ diff --git a/include/configs/MCR3000.h b/include/configs/MCR3000.h new file mode 100644 index 0000000000..53d4e9468a --- /dev/null +++ b/include/configs/MCR3000.h @@ -0,0 +1,240 @@ +/*
- Copyright (C) 2010-2017 CS Systemes d'Information
- Christophe Leroy christophe.leroy@c-s.fr
- SPDX-License-Identifier: GPL-2.0+
- */
+#ifndef __CONFIG_H +#define __CONFIG_H
+/*-----------------------------------------------------------------------
- High Level Configuration Options
- (easy to change)
- */
+#define CONFIG_BOARD_EARLY_INIT_F 1 /* Call board_early_init_f */ +#define CONFIG_MISC_INIT_R 1 /* Call misc_init_r */
+#define CONFIG_EXTRA_ENV_SETTINGS \
- "sdram_type=SDRAM\0" \
- "flash_type=AM29LV160DB\0" \
- "loadaddr=0x400000\0" \
- "filename=uImage.lzma\0" \
- "nfsroot=/opt/ofs\0" \
- "dhcp_ip=ip=:::::eth0:dhcp\0" \
- "console_args=console=ttyCPM0,115200N8\0" \
- "flashboot=setenv bootargs " \
"${console_args} " \
"ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:" \
"mcr3k:eth0:off;" \
"${ofl_args}; " \
"bootm 0x04060000 - 0x04050000\0" \
- "tftpboot=setenv bootargs " \
"${console_args} " \
"ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:" \
"mcr3k:eth0:off " \
"${ofl_args}; " \
"tftp ${loadaddr} ${filename};" \
"tftp 0xf00000 mcr3000.dtb;" \
"bootm ${loadaddr} - 0xf00000\0" \
- "netboot=dhcp ${loadaddr} ${filename};" \
"tftp 0xf00000 mcr3000.dtb;" \
"setenv bootargs " \
"root=/dev/nfs rw " \
"${console_args} " \
"${dhcp_ip};" \
"bootm ${loadaddr} - 0xf00000\0" \
- "nfsboot=setenv bootargs " \
"root=/dev/nfs rw nfsroot=${serverip}:${nfsroot} " \
"${console_args} " \
"ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:" \
"mcr3k:eth0:off;" \
"bootm 0x04060000 - 0x04050000\0" \
- "dhcpboot=dhcp ${loadaddr} ${filename};" \
"tftp 0xf00000 mcr3000.dtb;" \
"setenv bootargs " \
"${console_args} " \
"${dhcp_ip} " \
"${ofl_args}; " \
"bootm ${loadaddr} - 0xf00000\0"
+#define CONFIG_BOOTDELAY 5
+#define CONFIG_IPADDR 192.168.0.3 +#define CONFIG_SERVERIP 192.168.0.1 +#define CONFIG_NETMASK 255.0.0.0
You really use fix addresses?
By default in uboot, yes. That's the factory default.
+#define CONFIG_BOOTCOMMAND "run flashboot" +#define CONFIG_BOOTARGS "ubi.mtd=4 root=ubi0:rootfs rw " \
"rootfstype=ubifs rootflags=sync " \
"console=ttyCPM0,115200N8 " \
"ip=${ipaddr}:::${netmask}:mcr3k:eth0:off"
+#define CONFIG_LOADS_ECHO 1 /* echo on for serial download */ +#undef CONFIG_LOADS_BAUD_CHANGE /* don't allow baudrate change */
+#define CONFIG_WATCHDOG 1 /* watchdog enabled */
+/*-----------------------------------------------------------------------
- Password configuration.
- */
+#define CONFIG_AUTOBOOT_KEYED 1 +#define CONFIG_AUTOBOOT_PROMPT "\nEnter password - autoboot in %d sec...\n" +#define CONFIG_AUTOBOOT_DELAY_STR "root" /* 1st password */
This are already in Kconfig, please move them to your defconfig file.
Ok
+/*-----------------------------------------------------------------------
- Miscellaneous configurable options
- */
+#define CONFIG_SYS_LONGHELP +#define CONFIG_SYS_CBSIZE 256 +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16) +#define CONFIG_SYS_MAXARGS 16 +#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
+#define CONFIG_CMDLINE_EDITING 1 +#ifdef CONFIG_HUSH_PARSER +#define CONFIG_SYS_PROMPT_HUSH_PS2 "S3K> " +#endif
+#define CONFIG_SYS_MEMTEST_START 0x00002000 +#define CONFIG_SYS_MEMTEST_END 0x00800000
+#define CONFIG_SYS_LOAD_ADDR 0x200000
+#define CONFIG_SYS_HZ 1000
+#define CONFIG_SYS_BAUDRATE_TABLE {9600, 19200, 38400, 57600, 115200}
+/*-----------------------------------------------------------------------
- Physical memory map of the MCR3000 board
- */
+#define ADDR_FLASH (CONFIG_SYS_BR0_PRELIM & 0xFFFF0000) +#define ADDR_SDRAM (CONFIG_SYS_BR1_PRELIM & 0xFFFF0000) +#define ADDR_RAMDP (CONFIG_SYS_BR2_PRELIM & 0xFFFF0000) +#define ADDR_NAND (CONFIG_SYS_BR3_PRELIM & 0xFFFF0000) +#define ADDR_MTSL1 ((CONFIG_SYS_BR4_PRELIM & 0xFFFF0000) | 0x00000000) +#define ADDR_MTSL2 ((CONFIG_SYS_BR4_PRELIM & 0xFFFF0000) | 0x00000200) +#define ADDR_E1 ((CONFIG_SYS_BR4_PRELIM & 0xFFFF0000) | 0x00000400) +#define ADDR_SEM ((CONFIG_SYS_BR4_PRELIM & 0xFFFF0000) | 0x00000600) +#define ADDR_CPLD ((CONFIG_SYS_BR4_PRELIM & 0xFFFF0000) | 0x00000800)
Where are this defines used?
Euh ... nowhere it seems.
ADDR_CPLD should be used in ADDR_CPLD_R_ETAT instead of hard coding it. I'll fix it and remove the unneeded ones.
+/*-----------------------------------------------------------------------
- Definitions for initial stack pointer and data area (in DPRAM)
- */
+#define CONFIG_SYS_INIT_RAM_ADDR CONFIG_SYS_IMMR +#define CONFIG_SYS_INIT_RAM_SIZE 0x2f00 +#define CONFIG_SYS_GBL_DATA_SIZE 64 +#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_SIZE - \
CONFIG_SYS_GBL_DATA_SIZE)
+#define CONFIG_SYS_INIT_SP_OFFSET CONFIG_SYS_GBL_DATA_OFFSET
+/*-----------------------------------------------------------------------
- RAM configuration (note that CONFIG_SYS_SDRAM_BASE must be zero)
- */
+#define CONFIG_SYS_SDRAM_BASE 0x00000000 +#define SDRAM_MAX_SIZE (32 * 1024 * 1024)
+/*-----------------------------------------------------------------------
- FLASH organization
- */
+#define CONFIG_SYS_FLASH_BASE CONFIG_SYS_TEXT_BASE +#define CONFIG_SYS_FLASH_CFI 1 +#define CONFIG_FLASH_CFI_DRIVER 1 +#define CONFIG_SYS_MAX_FLASH_BANKS 1 +#define CONFIG_SYS_MAX_FLASH_SECT 35 +#define CONFIG_SYS_FLASH_ERASE_TOUT 120000 +#define CONFIG_SYS_FLASH_WRITE_TOUT 500
+/*-----------------------------------------------------------------------
- For booting Linux, the board info and command line data
- have to be in the first 8 MB of memory, since this is
- the maximum mapped by the Linux kernel during initialization.
- */
+#define CONFIG_SYS_BOOTMAPSZ (8 << 20) +#define CONFIG_SYS_MONITOR_LEN (256 << 10) +#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE +#define CONFIG_SYS_MALLOC_LEN (4096 << 10)
+/*-----------------------------------------------------------------------
- Environment Configuration
- */
+/* environment is in FLASH */ +#define CONFIG_ENV_IS_IN_FLASH 1 +#define CONFIG_ENV_SECT_SIZE (64 * 1024) +#define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE +#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + CONFIG_SYS_MONITOR_LEN) +#define CONFIG_ENV_OFFSET (CONFIG_ENV_ADDR - CONFIG_SYS_FLASH_BASE) +#define CONFIG_ENV_OVERWRITE 1
+/*-----------------------------------------------------------------------
- Cache Configuration
- */
+#define CONFIG_SYS_CACHELINE_SIZE 16
+/*-----------------------------------------------------------------------
- Ethernet configuration part
- */
+#define CONFIG_SYS_DISCOVER_PHY 1 +#ifdef CONFIG_MPC8XX_FEC +#define CONFIG_MII_INIT 1 +#endif
+/*-----------------------------------------------------------------------
- NAND configuration part
- */
+#define CONFIG_SYS_MAX_NAND_DEVICE 1 +#define CONFIG_SYS_NAND_MAX_CHIPS 1 +#define CONFIG_SYS_NAND_BASE 0x0C000000
+/*-----------------------------------------------------------------------
- Pass open firmware flat tree
- */
+#define CONFIG_OF_LIBFDT 1 +#define CONFIG_OF_BOARD_SETUP 1
Here too... already Kconfig symbols, please move to your board defconfig
Ok
+/*-----------------------------------------------------------------------
- Internal Definitions
- Boot Flags
- */
+#define BOOTFLAG_COLD 0x01 +#define BOOTFLAG_WARM 0x02
+/*-----------------------------------------------------------------------
- Misc Settings
- */
+#define CONFIG_LZMA +#define CONFIG_SHA256
Here too... already Kconfig symbols, please move to your board defconfig
Ok
+#define CONFIG_CMD_REGINFO
Hmm... you enable this define also in your defconfig, but I cannot find it in a Kconfig file ...
pollux:u-boot hs [mpc8xx_restore] $ grep -lr CMD_REGINFO . | grep Kconfig pollux:u-boot hs [mpc8xx_restore] $
How did you got it in your "configs/MCR3000_defconfig" file?
Manually, my mistake.
BTW: it would be nice to move this define to Kconfig ;-)
It also has impact on mpc85xx and mpc86xx. My plan is to split cmd/reginfo.c into the three arches to get rid of the #ifdefs (there is no common part indeed), and move to Kconfig. I put it on my TODO list for August.
bye, Heiko
Thanks for your review Christophe
+#endif /* __CONFIG_H */