diff options
author | Wadim Egorov <w.egorov@phytec.de> | 2015-02-04 15:00:51 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2015-03-02 07:54:12 +0100 |
commit | d0ae1330b00c6e7cf0ac9aab799d24f78482c990 (patch) | |
tree | 5d6911c2074f720317d0b009851a8be60c397a61 /arch/arm | |
parent | c145c929cbe98128341c651c92edf485c1784285 (diff) | |
download | barebox-d0ae1330b00c6e7cf0ac9aab799d24f78482c990.tar.gz barebox-d0ae1330b00c6e7cf0ac9aab799d24f78482c990.tar.xz |
boards: Add phytec-som-am335x
The main idea behind this patch is to avoid redundant board code.
Because of the module similarities of all am335x based phytec boards, we can
merge its code.
The phytec-som-am335x merges the code of all am335x based phytec SOMs.
So we will have only one "board" in the barebox for phyCORE, phyFLEX.
Signed-off-by: Wadim Egorov <w.egorov@phytec.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm')
25 files changed, 230 insertions, 481 deletions
diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile index a85de760f7..5b0a6d67bd 100644 --- a/arch/arm/boards/Makefile +++ b/arch/arm/boards/Makefile @@ -81,8 +81,7 @@ obj-$(CONFIG_MACH_PCM037) += phytec-phycore-imx31/ obj-$(CONFIG_MACH_PCM038) += phytec-phycore-imx27/ obj-$(CONFIG_MACH_PCM043) += phytec-phycore-imx35/ obj-$(CONFIG_MACH_PCM049) += phytec-phycore-omap4460/ -obj-$(CONFIG_MACH_PCM051) += phytec-phycore-am335x/ -obj-$(CONFIG_MACH_PFLA03) += phytec-phyflex-am335x/ +obj-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += phytec-som-am335x/ obj-$(CONFIG_MACH_PHYTEC_PFLA02) += phytec-phyflex-imx6/ obj-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_AX3) += plathome-openblocks-ax3/ obj-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += plathome-openblocks-a6/ diff --git a/arch/arm/boards/phytec-phycore-am335x/board.c b/arch/arm/boards/phytec-phycore-am335x/board.c deleted file mode 100644 index 61a11cfaa3..0000000000 --- a/arch/arm/boards/phytec-phycore-am335x/board.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * pcm051 - phyCORE-AM335x Board Initalization Code - * - * Copyright (C) 2012 Teresa Gámez, Phytec Messtechnik GmbH - * - * Based on arch/arm/boards/omap/board-beagle.c - * - * 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. - * - */ - -#include <bootsource.h> -#include <common.h> -#include <nand.h> -#include <init.h> -#include <io.h> -#include <linux/sizes.h> -#include <envfs.h> -#include <asm/armlinux.h> -#include <generated/mach-types.h> -#include <linux/phy.h> -#include <mach/am33xx-generic.h> -#include <mach/am33xx-silicon.h> -#include <mach/bbu.h> - - -static int pcm051_coredevice_init(void) -{ - if (!of_machine_is_compatible("phytec,phycore-am335x-som")) - return 0; - - am33xx_register_ethaddr(0, 0); - return 0; -} -coredevice_initcall(pcm051_coredevice_init); - -static struct omap_barebox_part pcm051_barebox_part = { - .nand_offset = SZ_512K, - .nand_size = SZ_512K, - .nor_offset = SZ_128K, - .nor_size = SZ_512K, -}; - -static char *xloadslots[] = { - "/dev/nand0.xload.bb", - "/dev/nand0.xload_backup1.bb", - "/dev/nand0.xload_backup2.bb", - "/dev/nand0.xload_backup3.bb" -}; - -static int pcm051_devices_init(void) -{ - if (!of_machine_is_compatible("phytec,phycore-am335x-som")) - return 0; - - switch (bootsource_get()) { - case BOOTSOURCE_SPI: - of_device_enable_path("/chosen/environment-spi"); - break; - case BOOTSOURCE_MMC: - omap_set_bootmmc_devname("mmc0"); - break; - default: - of_device_enable_path("/chosen/environment-nand"); - break; - } - - omap_set_barebox_part(&pcm051_barebox_part); - armlinux_set_architecture(MACH_TYPE_PCM051); - defaultenv_append_directory(defaultenv_phycore_am335x); - - am33xx_bbu_spi_nor_mlo_register_handler("MLO.spi", "/dev/m25p0.xload"); - am33xx_bbu_spi_nor_register_handler("spi", "/dev/m25p0.barebox"); - am33xx_bbu_nand_xloadslots_register_handler("MLO.nand", - xloadslots, ARRAY_SIZE(xloadslots)); - am33xx_bbu_nand_register_handler("nand", "/dev/nand0.barebox.bb"); - - if (IS_ENABLED(CONFIG_SHELL_NONE)) - return am33xx_of_register_bootdevice(); - - return 0; -} -device_initcall(pcm051_devices_init); diff --git a/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/boot/mmc b/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/boot/mmc deleted file mode 100644 index 6a6076101e..0000000000 --- a/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/boot/mmc +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -global.bootm.image=/boot/linuximage -#global.bootm.oftree=/boot/oftree - -bootargs-ip - -global.linux.bootargs.dyn.root="root=/dev/mmcblk0p2 rootfstype=ext3 rw rootwait" diff --git a/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/boot/nand b/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/boot/nand deleted file mode 100644 index 1dfbef9d8b..0000000000 --- a/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/boot/nand +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -global.bootm.image="/dev/nand0.kernel.bb" -#global.bootm.oftree="/env/oftree" - -bootargs-ip - -global.linux.bootargs.dyn.root="root=ubi0:root ubi.mtd=root rw rootfstype=ubifs" diff --git a/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/init/init-usbserial b/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/init/init-usbserial deleted file mode 100644 index a154fd1805..0000000000 --- a/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/init/init-usbserial +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -#otg1.mode=peripheral -usbgadget -a -A /dev/nand0.kernel.bb(kernel) diff --git a/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/nv/bootargs.base b/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/nv/bootargs.base deleted file mode 100644 index d7b01a1683..0000000000 --- a/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/nv/bootargs.base +++ /dev/null @@ -1 +0,0 @@ -console=ttyO0,115200 diff --git a/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/nv/hostname b/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/nv/hostname deleted file mode 100644 index 988ab6dd32..0000000000 --- a/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/nv/hostname +++ /dev/null @@ -1 +0,0 @@ -pcm051 diff --git a/arch/arm/boards/phytec-phycore-am335x/lowlevel.c b/arch/arm/boards/phytec-phycore-am335x/lowlevel.c deleted file mode 100644 index 843929e945..0000000000 --- a/arch/arm/boards/phytec-phycore-am335x/lowlevel.c +++ /dev/null @@ -1,215 +0,0 @@ -#include <common.h> -#include <linux/sizes.h> -#include <io.h> -#include <init.h> -#include <asm/barebox-arm-head.h> -#include <asm/barebox-arm.h> -#include <mach/am33xx-silicon.h> -#include <mach/am33xx-clock.h> -#include <mach/generic.h> -#include <mach/sdrc.h> -#include <mach/sys_info.h> -#include <mach/syslib.h> -#include <mach/am33xx-mux.h> -#include <mach/am33xx-generic.h> -#include <mach/wdt.h> -#include <debug_ll.h> - -static const struct am33xx_cmd_control pcm051_cmd = { - .slave_ratio0 = 0x80, - .dll_lock_diff0 = 0x0, - .invert_clkout0 = 0x0, - .slave_ratio1 = 0x80, - .dll_lock_diff1 = 0x0, - .invert_clkout1 = 0x0, - .slave_ratio2 = 0x80, - .dll_lock_diff2 = 0x0, - .invert_clkout2 = 0x0, -}; - -struct pcm051_sdram_timings { - struct am33xx_emif_regs regs; - struct am33xx_ddr_data data; -}; - -enum { - MT41J128M16125IT_256MB, - MT41J64M1615IT_128MB, - MT41J256M16HA15EIT_512MB, - MT41J512M8125IT_2x512MB, -}; - -struct pcm051_sdram_timings timings[] = { - /* 256MB */ - [MT41J128M16125IT_256MB] = { - .regs = { - .emif_read_latency = 0x7, - .emif_tim1 = 0x0AAAD4DB, - .emif_tim2 = 0x26437FDA, - .emif_tim3 = 0x501F83FF, - .sdram_config = 0x61C052B2, - .zq_config = 0x50074BE4, - .sdram_ref_ctrl = 0x00000C30, - }, - .data = { - .rd_slave_ratio0 = 0x3B, - .wr_dqs_slave_ratio0 = 0x33, - .fifo_we_slave_ratio0 = 0x9c, - .wr_slave_ratio0 = 0x6f, - }, - }, - - /* 128MB */ - [MT41J64M1615IT_128MB] = { - .regs = { - .emif_read_latency = 0x7, - .emif_tim1 = 0x0AAAE4DB, - .emif_tim2 = 0x262F7FDA, - .emif_tim3 = 0x501F82BF, - .sdram_config = 0x61C05232, - .zq_config = 0x50074BE4, - .sdram_ref_ctrl = 0x00000C30, - }, - .data = { - .rd_slave_ratio0 = 0x38, - .wr_dqs_slave_ratio0 = 0x34, - .fifo_we_slave_ratio0 = 0xA2, - .wr_slave_ratio0 = 0x72, - }, - }, - - /* 512MB */ - [MT41J256M16HA15EIT_512MB] = { - .regs = { - .emif_read_latency = 0x7, - .emif_tim1 = 0x0AAAE4DB, - .emif_tim2 = 0x266B7FDA, - .emif_tim3 = 0x501F867F, - .sdram_config = 0x61C05332, - .zq_config = 0x50074BE4, - .sdram_ref_ctrl = 0x00000C30 - }, - .data = { - .rd_slave_ratio0 = 0x35, - .wr_dqs_slave_ratio0 = 0x43, - .fifo_we_slave_ratio0 = 0x97, - .wr_slave_ratio0 = 0x7b, - }, - }, - - /* 1024MB */ - [MT41J512M8125IT_2x512MB] = { - .regs = { - .emif_read_latency = 0x7, - .emif_tim1 = 0x0AAAE4DB, - .emif_tim2 = 0x266B7FDA, - .emif_tim3 = 0x501F867F, - .sdram_config = 0x61C053B2, - .zq_config = 0x50074BE4, - .sdram_ref_ctrl = 0x00000C30 - }, - .data = { - .rd_slave_ratio0 = 0x32, - .wr_dqs_slave_ratio0 = 0x48, - .fifo_we_slave_ratio0 = 0x99, - .wr_slave_ratio0 = 0x80, - }, - }, -}; - -extern char __dtb_am335x_phytec_phycore_som_start[]; -extern char __dtb_am335x_phytec_phycore_som_mlo_start[]; -extern char __dtb_am335x_phytec_phycore_som_no_spi_start[]; - -/** - * @brief The basic entry point for board initialization. - * - * This is called as part of machine init (after arch init). - * This is again called with stack in SRAM, so not too many - * constructs possible here. - * - * @return void - */ -static noinline void pcm051_board_init(int sdram) -{ - void *fdt; - struct pcm051_sdram_timings *timing = &timings[sdram]; - - /* WDT1 is already running when the bootloader gets control - * Disable it to avoid "random" resets - */ - writel(WDT_DISABLE_CODE1, AM33XX_WDT_REG(WSPR)); - while (readl(AM33XX_WDT_REG(WWPS)) != 0x0); - - writel(WDT_DISABLE_CODE2, AM33XX_WDT_REG(WSPR)); - while (readl(AM33XX_WDT_REG(WWPS)) != 0x0); - - am33xx_pll_init(MPUPLL_M_600, 25, DDRPLL_M_400); - - am335x_sdram_init(0x18B, &pcm051_cmd, - &timing->regs, - &timing->data); - - am33xx_uart_soft_reset((void *)AM33XX_UART0_BASE); - am33xx_enable_uart0_pin_mux(); - omap_uart_lowlevel_init((void *)AM33XX_UART0_BASE); - putc_ll('>'); - - fdt = __dtb_am335x_phytec_phycore_som_mlo_start - get_runtime_offset(); - - am335x_barebox_entry(fdt); -} - -static noinline void pcm051_board_entry(unsigned long bootinfo, int sdram) -{ - am33xx_save_bootinfo((void *)bootinfo); - - arm_cpu_lowlevel_init(); - - /* - * Setup C environment, the board init code uses global variables. - * Stackpointer has already been initialized by the ROM code. - */ - relocate_to_current_adr(); - setup_c(); - - pcm051_board_init(sdram); -} - -ENTRY_FUNCTION(start_am33xx_phytec_phycore_sram_256mb, bootinfo, r1, r2) -{ - pcm051_board_entry(bootinfo, MT41J128M16125IT_256MB); -} - -ENTRY_FUNCTION(start_am33xx_phytec_phycore_sram_128mb, bootinfo, r1, r2) -{ - pcm051_board_entry(bootinfo, MT41J64M1615IT_128MB); -} - -ENTRY_FUNCTION(start_am33xx_phytec_phycore_sram_512mb, bootinfo, r1, r2) -{ - pcm051_board_entry(bootinfo, MT41J256M16HA15EIT_512MB); -} - -ENTRY_FUNCTION(start_am33xx_phytec_phycore_sram_2x512mb, bootinfo, r1, r2) -{ - pcm051_board_entry(bootinfo, MT41J512M8125IT_2x512MB); -} - -ENTRY_FUNCTION(start_am33xx_phytec_phycore_sdram, r0, r1, r2) -{ - void *fdt; - - fdt = __dtb_am335x_phytec_phycore_som_start - get_runtime_offset(); - - am335x_barebox_entry(fdt); -} - -ENTRY_FUNCTION(start_am33xx_phytec_phycore_no_spi_sdram, r0, r1, r2) -{ - void *fdt; - - fdt = __dtb_am335x_phytec_phycore_som_no_spi_start - get_runtime_offset(); - - am335x_barebox_entry(fdt); -} diff --git a/arch/arm/boards/phytec-phyflex-am335x/Makefile b/arch/arm/boards/phytec-phyflex-am335x/Makefile deleted file mode 100644 index 54734b5736..0000000000 --- a/arch/arm/boards/phytec-phyflex-am335x/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -lwl-y += lowlevel.o -obj-y += board.o -bbenv-y += defaultenv-phyflex-am335x diff --git a/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/boot/spi b/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/boot/spi deleted file mode 100644 index 2f858bd0d9..0000000000 --- a/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/boot/spi +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -global.bootm.image="/dev/m25p0.kernel" - -bootargs-ip - -# Use rootfs from NAND -global.linux.bootargs.dyn.root="root=ubi0:root ubi.mtd=nand0.root,2048 rw rootfstype=ubifs" diff --git a/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/init/bootsource b/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/init/bootsource deleted file mode 100644 index 3f2ff4bcc8..0000000000 --- a/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/init/bootsource +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -if [ -n "$nv.boot.default" ]; then - exit -fi - -if [ $bootsource = mmc ]; then - global.boot.default="mmc nand spi net" -elif [ $bootsource = nand ]; then - global.boot.default="nand spi mmc net" -elif [ $bootsource = spi ]; then - global.boot.default="spi nand mmc net" -elif [ $bootsource = net ]; then - global.boot.default="net nand spi mmc" -fi diff --git a/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/nv/hostname b/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/nv/hostname deleted file mode 100644 index 09c5821d49..0000000000 --- a/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/nv/hostname +++ /dev/null @@ -1 +0,0 @@ -pfla03 diff --git a/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/nv/linux.bootargs.base b/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/nv/linux.bootargs.base deleted file mode 100644 index d7b01a1683..0000000000 --- a/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/nv/linux.bootargs.base +++ /dev/null @@ -1 +0,0 @@ -console=ttyO0,115200 diff --git a/arch/arm/boards/phytec-phycore-am335x/Makefile b/arch/arm/boards/phytec-som-am335x/Makefile index 173a6b6fd5..78397bd59f 100644 --- a/arch/arm/boards/phytec-phycore-am335x/Makefile +++ b/arch/arm/boards/phytec-som-am335x/Makefile @@ -1,3 +1,3 @@ lwl-y += lowlevel.o obj-y += board.o -bbenv-y += defaultenv-phycore-am335x +bbenv-y += defaultenv-physom-am335x diff --git a/arch/arm/boards/phytec-phyflex-am335x/board.c b/arch/arm/boards/phytec-som-am335x/board.c index aed5c31883..d08489890c 100644 --- a/arch/arm/boards/phytec-phyflex-am335x/board.c +++ b/arch/arm/boards/phytec-som-am335x/board.c @@ -1,9 +1,9 @@ /* - * pfla03 - phyFLEX-AM335x Board Initalization Code + * Copyright (C) 2015 Wadim Egorov, PHYTEC Messtechnik GmbH * - * Copyright (C) 2014 Stefan Müller-Klieser, Phytec Messtechnik GmbH - * - * Based on arch/arm/boards/omap/board-beagle.c + * Device initialization for the following modules and board variants: + * - phyCORE: PCM-953, phyBOARD-MAIA, phyBOARD-WEGA + * - phyFLEX: PBA-B-01 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -32,19 +32,18 @@ #include <mach/am33xx-silicon.h> #include <mach/bbu.h> -static int pfla03_coredevice_init(void) +static int physom_coredevice_init(void) { - if (!of_machine_is_compatible("phytec,phyflex-am335x-som")) + if (!of_machine_is_compatible("phytec,am335x-som")) return 0; am33xx_register_ethaddr(0, 0); - am33xx_register_ethaddr(1, 1); return 0; } -coredevice_initcall(pfla03_coredevice_init); +coredevice_initcall(physom_coredevice_init); -static struct omap_barebox_part pfla03_barebox_part = { +static struct omap_barebox_part physom_barebox_part = { .nand_offset = SZ_512K, .nand_size = SZ_512K, .nor_offset = SZ_128K, @@ -58,9 +57,9 @@ static char *xloadslots[] = { "/dev/nand0.xload_backup3.bb" }; -static int pfla03_devices_init(void) +static int physom_devices_init(void) { - if (!of_machine_is_compatible("phytec,phyflex-am335x-som")) + if (!of_machine_is_compatible("phytec,am335x-som")) return 0; switch (bootsource_get()) { @@ -75,12 +74,22 @@ static int pfla03_devices_init(void) break; } - omap_set_barebox_part(&pfla03_barebox_part); - armlinux_set_architecture(MACH_TYPE_PFLA03); - defaultenv_append_directory(defaultenv_phyflex_am335x); + omap_set_barebox_part(&physom_barebox_part); + defaultenv_append_directory(defaultenv_physom_am335x); - am33xx_select_rmii2_crs_dv(); + /* Special module set up */ + if (of_machine_is_compatible("phytec,phycore-am335x-som")) { + armlinux_set_architecture(MACH_TYPE_PCM051); + barebox_set_hostname("pcm051"); + } + if (of_machine_is_compatible("phytec,phyflex-am335x-som")) { + armlinux_set_architecture(MACH_TYPE_PFLA03); + am33xx_select_rmii2_crs_dv(); + barebox_set_hostname("pfla03"); + } + + /* Register update handler */ am33xx_bbu_spi_nor_mlo_register_handler("MLO.spi", "/dev/m25p0.xload"); am33xx_bbu_spi_nor_register_handler("spi", "/dev/m25p0.barebox"); am33xx_bbu_nand_xloadslots_register_handler("MLO.nand", @@ -90,7 +99,6 @@ static int pfla03_devices_init(void) if (IS_ENABLED(CONFIG_SHELL_NONE)) return am33xx_of_register_bootdevice(); - return 0; } -device_initcall(pfla03_devices_init); +device_initcall(physom_devices_init); diff --git a/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/boot/mmc b/arch/arm/boards/phytec-som-am335x/defaultenv-physom-am335x/boot/mmc index 6a6076101e..1a642f9647 100644 --- a/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/boot/mmc +++ b/arch/arm/boards/phytec-som-am335x/defaultenv-physom-am335x/boot/mmc @@ -1,7 +1,7 @@ #!/bin/sh global.bootm.image=/boot/linuximage -#global.bootm.oftree=/boot/oftree +global.bootm.oftree=/boot/oftree bootargs-ip diff --git a/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/boot/nand b/arch/arm/boards/phytec-som-am335x/defaultenv-physom-am335x/boot/nand index 1dfbef9d8b..c6e49be3c5 100644 --- a/arch/arm/boards/phytec-phyflex-am335x/defaultenv-phyflex-am335x/boot/nand +++ b/arch/arm/boards/phytec-som-am335x/defaultenv-physom-am335x/boot/nand @@ -1,7 +1,7 @@ #!/bin/sh global.bootm.image="/dev/nand0.kernel.bb" -#global.bootm.oftree="/env/oftree" +global.bootm.oftree="/dev/nand0.oftree.bb" bootargs-ip diff --git a/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/boot/spi b/arch/arm/boards/phytec-som-am335x/defaultenv-physom-am335x/boot/spi index 2f858bd0d9..a9c0fe8a23 100644 --- a/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/boot/spi +++ b/arch/arm/boards/phytec-som-am335x/defaultenv-physom-am335x/boot/spi @@ -1,6 +1,7 @@ #!/bin/sh global.bootm.image="/dev/m25p0.kernel" +global.bootm.oftree="/dev/m25p0.oftree" bootargs-ip diff --git a/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/init/bootsource b/arch/arm/boards/phytec-som-am335x/defaultenv-physom-am335x/init/bootsource index 3f2ff4bcc8..3f2ff4bcc8 100644 --- a/arch/arm/boards/phytec-phycore-am335x/defaultenv-phycore-am335x/init/bootsource +++ b/arch/arm/boards/phytec-som-am335x/defaultenv-physom-am335x/init/bootsource diff --git a/arch/arm/boards/phytec-phyflex-am335x/lowlevel.c b/arch/arm/boards/phytec-som-am335x/lowlevel.c index f6029cdffd..87ad1f32bc 100644 --- a/arch/arm/boards/phytec-phyflex-am335x/lowlevel.c +++ b/arch/arm/boards/phytec-som-am335x/lowlevel.c @@ -1,9 +1,5 @@ /* - * pfla03 - phyFLEX-AM335x lowlevel code - * - * Copyright (C) 2014 Stefan Müller-Klieser, Phytec Messtechnik GmbH - * - * Based on arch/arm/boards/omap/board-beagle.c + * Copyright (C) 2015 Wadim Egorov, PHYTEC Messtechnik GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -34,10 +30,12 @@ #include <mach/wdt.h> #include <debug_ll.h> +#include "ram-timings.h" + #define CLK_M_OSC_MHZ 25 #define DDR_IOCTRL 0x18B -static const struct am33xx_cmd_control pfla03_cmd = { +static const struct am33xx_cmd_control physom_cmd = { .slave_ratio0 = 0x80, .dll_lock_diff0 = 0x0, .invert_clkout0 = 0x0, @@ -49,62 +47,6 @@ static const struct am33xx_cmd_control pfla03_cmd = { .invert_clkout2 = 0x0, }; -struct pfla03_sdram_timings { - struct am33xx_emif_regs regs; - struct am33xx_ddr_data data; -}; - -enum { - MT41K128M16JT_256MB, - MT41K256M16HA_512MB, -}; - -struct pfla03_sdram_timings pfla03_timings[] = { - /* 256 MB */ - [MT41K128M16JT_256MB] = { - .regs = { - .emif_read_latency = 0x7, - .emif_tim1 = 0x0AAAD4DB, - .emif_tim2 = 0x26437FDA, - .emif_tim3 = 0x501F83FF, - .sdram_config = 0x61C052B2, - .zq_config = 0x50074BE4, - .sdram_ref_ctrl = 0x00000C30, - }, - .data = { - .rd_slave_ratio0 = 0x34, - .wr_dqs_slave_ratio0 = 0x47, - .fifo_we_slave_ratio0 = 0x9a, - .wr_slave_ratio0 = 0x7e, - .use_rank0_delay = 0x0, - .dll_lock_diff0 = 0x0, - }, - }, - /* 512 MB */ - [MT41K256M16HA_512MB] = { - .regs = { - .emif_read_latency = 0x7, - .emif_tim1 = 0x0AAAE4DB, - .emif_tim2 = 0x266B7FDA, - .emif_tim3 = 0x501F867F, - .sdram_config = 0x61C05332, - .zq_config = 0x50074BE4, - .sdram_ref_ctrl = 0x00000C30, - }, - .data = { - .rd_slave_ratio0 = 0x36, - .wr_dqs_slave_ratio0 = 0x47, - .fifo_we_slave_ratio0 = 0x95, - .wr_slave_ratio0 = 0x7f, - .use_rank0_delay = 0x0, - .dll_lock_diff0 = 0x0, - }, - }, -}; - -extern char __dtb_am335x_phytec_phyflex_som_start[]; -extern char __dtb_am335x_phytec_phyflex_som_mlo_start[]; - /** * @brief The basic entry point for board initialization. * @@ -114,10 +56,9 @@ extern char __dtb_am335x_phytec_phyflex_som_mlo_start[]; * * @return void */ -static noinline void pfla03_board_init(int sdram) +static noinline void physom_board_init(int sdram, void *fdt) { - void *fdt; - struct pfla03_sdram_timings *timing = &pfla03_timings[sdram]; + struct am335x_sdram_timings *timing = &physom_timings[sdram]; /* * WDT1 is already running when the bootloader gets control @@ -126,12 +67,13 @@ static noinline void pfla03_board_init(int sdram) writel(WDT_DISABLE_CODE1, AM33XX_WDT_REG(WSPR)); while (readl(AM33XX_WDT_REG(WWPS)) != 0x0); + writel(WDT_DISABLE_CODE2, AM33XX_WDT_REG(WSPR)); while (readl(AM33XX_WDT_REG(WWPS)) != 0x0); am33xx_pll_init(MPUPLL_M_600, CLK_M_OSC_MHZ, DDRPLL_M_400); - am335x_sdram_init(DDR_IOCTRL, &pfla03_cmd, + am335x_sdram_init(DDR_IOCTRL, &physom_cmd, &timing->regs, &timing->data); @@ -140,12 +82,10 @@ static noinline void pfla03_board_init(int sdram) omap_uart_lowlevel_init((void *)AM33XX_UART0_BASE); putc_ll('>'); - fdt = __dtb_am335x_phytec_phyflex_som_mlo_start - get_runtime_offset(); - am335x_barebox_entry(fdt); } -static noinline void pfla03_board_entry(unsigned long bootinfo, int sdram) +static noinline void physom_board_entry(unsigned long bootinfo, int sdram, void *fdt) { am33xx_save_bootinfo((void *)bootinfo); @@ -158,24 +98,36 @@ static noinline void pfla03_board_entry(unsigned long bootinfo, int sdram) relocate_to_current_adr(); setup_c(); - pfla03_board_init(sdram); + physom_board_init(sdram, fdt); } -ENTRY_FUNCTION(start_am33xx_phytec_phyflex_sram_256mb, bootinfo, r1, r2) -{ - pfla03_board_entry(bootinfo, MT41K128M16JT_256MB); -} - -ENTRY_FUNCTION(start_am33xx_phytec_phyflex_sram_512mb, bootinfo, r1, r2) -{ - pfla03_board_entry(bootinfo, MT41K256M16HA_512MB); -} - -ENTRY_FUNCTION(start_am33xx_phytec_phyflex_sdram, r0, r1, r2) -{ - void *fdt; - - fdt = __dtb_am335x_phytec_phyflex_som_start - get_runtime_offset(); - - am335x_barebox_entry(fdt); -} +#define PHYTEC_ENTRY_MLO(name, fdt_name, sdram) \ + ENTRY_FUNCTION(name, bootinfo, r1, r2) \ + { \ + extern char __dtb_##fdt_name##_start[]; \ + void *fdt =__dtb_##fdt_name##_start - \ + get_runtime_offset(); \ + physom_board_entry(bootinfo, sdram, fdt); \ + } + +#define PHYTEC_ENTRY(name, fdt_name) \ + ENTRY_FUNCTION(name, r0, r1, r2) \ + { \ + extern char __dtb_##fdt_name##_start[]; \ + void *fdt =__dtb_##fdt_name##_start - \ + get_runtime_offset(); \ + am335x_barebox_entry(fdt); \ + } + +/* phycore-som */ +PHYTEC_ENTRY_MLO(start_am33xx_phytec_phycore_sram_128mb, am335x_phytec_phycore_som_mlo, PHYCORE_MT41J64M1615IT_128MB); +PHYTEC_ENTRY_MLO(start_am33xx_phytec_phycore_sram_256mb, am335x_phytec_phycore_som_mlo, PHYCORE_MT41J128M16125IT_256MB); +PHYTEC_ENTRY_MLO(start_am33xx_phytec_phycore_sram_512mb, am335x_phytec_phycore_som_mlo, PHYCORE_MT41J256M16HA15EIT_512MB); +PHYTEC_ENTRY_MLO(start_am33xx_phytec_phycore_sram_2x512mb, am335x_phytec_phycore_som_mlo, PHYCORE_MT41J512M8125IT_2x512MB); +PHYTEC_ENTRY(start_am33xx_phytec_phycore_sdram, am335x_phytec_phycore_som); +PHYTEC_ENTRY(start_am33xx_phytec_phycore_no_spi_sdram, am335x_phytec_phycore_som_no_spi); + +/* phyflex-som */ +PHYTEC_ENTRY_MLO(start_am33xx_phytec_phyflex_sram_256mb, am335x_phytec_phyflex_som_mlo, PHYFLEX_MT41K128M16JT_256MB); +PHYTEC_ENTRY_MLO(start_am33xx_phytec_phyflex_sram_512mb, am335x_phytec_phyflex_som_mlo, PHYFLEX_MT41K256M16HA_512MB); +PHYTEC_ENTRY(start_am33xx_phytec_phyflex_sdram, am335x_phytec_phyflex_som); diff --git a/arch/arm/boards/phytec-som-am335x/ram-timings.h b/arch/arm/boards/phytec-som-am335x/ram-timings.h new file mode 100644 index 0000000000..6d1993ed55 --- /dev/null +++ b/arch/arm/boards/phytec-som-am335x/ram-timings.h @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2015 Wadim Egorov, PHYTEC Messtechnik GmbH + * + * 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. + * + */ + +#ifndef __RAM_TIMINGS_H +#define __RAM_TIMINGS_H + +struct am335x_sdram_timings { + struct am33xx_emif_regs regs; + struct am33xx_ddr_data data; +}; + +enum { + PHYFLEX_MT41K128M16JT_256MB, + PHYFLEX_MT41K256M16HA_512MB, + + PHYCORE_MT41J128M16125IT_256MB, + PHYCORE_MT41J64M1615IT_128MB, + PHYCORE_MT41J256M16HA15EIT_512MB, + PHYCORE_MT41J512M8125IT_2x512MB, +}; + +struct am335x_sdram_timings physom_timings[] = { + /* 256 MB */ + [PHYFLEX_MT41K128M16JT_256MB] = { + .regs = { + .emif_read_latency = 0x7, + .emif_tim1 = 0x0AAAD4DB, + .emif_tim2 = 0x26437FDA, + .emif_tim3 = 0x501F83FF, + .sdram_config = 0x61C052B2, + .zq_config = 0x50074BE4, + .sdram_ref_ctrl = 0x00000C30, + }, + .data = { + .rd_slave_ratio0 = 0x34, + .wr_dqs_slave_ratio0 = 0x47, + .fifo_we_slave_ratio0 = 0x9a, + .wr_slave_ratio0 = 0x7e, + .use_rank0_delay = 0x0, + .dll_lock_diff0 = 0x0, + }, + }, + + /* 512 MB */ + [PHYFLEX_MT41K256M16HA_512MB] = { + .regs = { + .emif_read_latency = 0x7, + .emif_tim1 = 0x0AAAE4DB, + .emif_tim2 = 0x266B7FDA, + .emif_tim3 = 0x501F867F, + .sdram_config = 0x61C05332, + .zq_config = 0x50074BE4, + .sdram_ref_ctrl = 0x00000C30, + }, + .data = { + .rd_slave_ratio0 = 0x36, + .wr_dqs_slave_ratio0 = 0x47, + .fifo_we_slave_ratio0 = 0x95, + .wr_slave_ratio0 = 0x7f, + .use_rank0_delay = 0x0, + .dll_lock_diff0 = 0x0, + }, + }, + + /* 256MB */ + [PHYCORE_MT41J128M16125IT_256MB] = { + .regs = { + .emif_read_latency = 0x7, + .emif_tim1 = 0x0AAAD4DB, + .emif_tim2 = 0x26437FDA, + .emif_tim3 = 0x501F83FF, + .sdram_config = 0x61C052B2, + .zq_config = 0x50074BE4, + .sdram_ref_ctrl = 0x00000C30, + }, + .data = { + .rd_slave_ratio0 = 0x3B, + .wr_dqs_slave_ratio0 = 0x33, + .fifo_we_slave_ratio0 = 0x9c, + .wr_slave_ratio0 = 0x6f, + }, + }, + + /* 128MB */ + [PHYCORE_MT41J64M1615IT_128MB] = { + .regs = { + .emif_read_latency = 0x7, + .emif_tim1 = 0x0AAAE4DB, + .emif_tim2 = 0x262F7FDA, + .emif_tim3 = 0x501F82BF, + .sdram_config = 0x61C05232, + .zq_config = 0x50074BE4, + .sdram_ref_ctrl = 0x00000C30, + }, + .data = { + .rd_slave_ratio0 = 0x38, + .wr_dqs_slave_ratio0 = 0x34, + .fifo_we_slave_ratio0 = 0xA2, + .wr_slave_ratio0 = 0x72, + }, + }, + + /* 512MB */ + [PHYCORE_MT41J256M16HA15EIT_512MB] = { + .regs = { + .emif_read_latency = 0x7, + .emif_tim1 = 0x0AAAE4DB, + .emif_tim2 = 0x266B7FDA, + .emif_tim3 = 0x501F867F, + .sdram_config = 0x61C05332, + .zq_config = 0x50074BE4, + .sdram_ref_ctrl = 0x00000C30 + }, + .data = { + .rd_slave_ratio0 = 0x35, + .wr_dqs_slave_ratio0 = 0x43, + .fifo_we_slave_ratio0 = 0x97, + .wr_slave_ratio0 = 0x7b, + }, + }, + + /* 1024MB */ + [PHYCORE_MT41J512M8125IT_2x512MB] = { + .regs = { + .emif_read_latency = 0x7, + .emif_tim1 = 0x0AAAE4DB, + .emif_tim2 = 0x266B7FDA, + .emif_tim3 = 0x501F867F, + .sdram_config = 0x61C053B2, + .zq_config = 0x50074BE4, + .sdram_ref_ctrl = 0x00000C30 + }, + .data = { + .rd_slave_ratio0 = 0x32, + .wr_dqs_slave_ratio0 = 0x48, + .fifo_we_slave_ratio0 = 0x99, + .wr_slave_ratio0 = 0x80, + }, + }, +}; + +#endif diff --git a/arch/arm/configs/am335x_defconfig b/arch/arm/configs/am335x_defconfig index e9bc1ba309..f34a4c6d3d 100644 --- a/arch/arm/configs/am335x_defconfig +++ b/arch/arm/configs/am335x_defconfig @@ -4,8 +4,7 @@ CONFIG_BAREBOX_UPDATE_AM33XX_NAND=y CONFIG_OMAP_MULTI_BOARDS=y CONFIG_MACH_AFI_GF=y CONFIG_MACH_BEAGLEBONE=y -CONFIG_MACH_PCM051=y -CONFIG_MACH_PFLA03=y +CONFIG_MACH_PHYTEC_SOM_AM335X=y CONFIG_THUMB2_BAREBOX=y CONFIG_ARM_BOARD_APPEND_ATAG=y CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y diff --git a/arch/arm/configs/am335x_mlo_defconfig b/arch/arm/configs/am335x_mlo_defconfig index 9734da60c7..1dd7567d0d 100644 --- a/arch/arm/configs/am335x_mlo_defconfig +++ b/arch/arm/configs/am335x_mlo_defconfig @@ -4,8 +4,7 @@ CONFIG_OMAP_SERIALBOOT=y CONFIG_OMAP_MULTI_BOARDS=y CONFIG_MACH_AFI_GF=y CONFIG_MACH_BEAGLEBONE=y -CONFIG_MACH_PCM051=y -CONFIG_MACH_PFLA03=y +CONFIG_MACH_PHYTEC_SOM_AM335X=y CONFIG_THUMB2_BAREBOX=y # CONFIG_MEMINFO is not set CONFIG_MMU=y diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 0793bcfb31..b11de1b72f 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -29,8 +29,7 @@ pbl-dtb-$(CONFIG_MACH_NVIDIA_JETSON) += tegra124-jetson-tk1.dtb.o pbl-dtb-$(CONFIG_MACH_PCA100) += imx27-phytec-phycard-s-rdk-bb.dtb.o pbl-dtb-$(CONFIG_MACH_PCAAXL3) += imx6q-phytec-pbaa03.dtb.o pbl-dtb-$(CONFIG_MACH_PCM038) += imx27-phytec-phycore-rdk.dtb.o -pbl-dtb-$(CONFIG_MACH_PCM051) += am335x-phytec-phycore-som.dtb.o am335x-phytec-phycore-som-no-spi.dtb.o am335x-phytec-phycore-som-mlo.dtb.o -pbl-dtb-$(CONFIG_MACH_PFLA03) += am335x-phytec-phyflex-som.dtb.o am335x-phytec-phyflex-som-mlo.dtb.o +pbl-dtb-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += am335x-phytec-phyflex-som.dtb.o am335x-phytec-phyflex-som-mlo.dtb.o am335x-phytec-phycore-som.dtb.o am335x-phytec-phycore-som-no-spi.dtb.o am335x-phytec-phycore-som-mlo.dtb.o pbl-dtb-$(CONFIG_MACH_PHYTEC_PFLA02) += imx6s-phytec-pbab01.dtb.o imx6dl-phytec-pbab01.dtb.o imx6q-phytec-pbab01.dtb.o imx6q-phytec-phyboard-alcor.dtb.o imx6dl-phytec-phyboard-subra.dtb.o pbl-dtb-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_AX3) += armada-xp-openblocks-ax3-4-bb.dtb.o pbl-dtb-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += kirkwood-openblocks_a6-bb.dtb.o diff --git a/arch/arm/mach-omap/Kconfig b/arch/arm/mach-omap/Kconfig index 7aa37ebd0f..444ddf8377 100644 --- a/arch/arm/mach-omap/Kconfig +++ b/arch/arm/mach-omap/Kconfig @@ -147,17 +147,11 @@ config MACH_BEAGLEBONE help Say Y here if you are using Beagle Bone -config MACH_PCM051 - bool "Phytec phyCORE pcm051" +config MACH_PHYTEC_SOM_AM335X + bool "Phytec AM335X SOMs" select ARCH_AM33XX help - Say Y here if you are using Phytecs phyCORE pcm051 board - -config MACH_PFLA03 - bool "Phytec phyFLEX am335x pfla03" - select ARCH_AM33XX - help - Say Y here if you are using Phytecs phyFLEX pfla03 board + Say Y here if you are using a am335x based Phytecs SOM endif choice |