Re: [U-Boot] [PATCH v3 0/4] introduce get_maintainer.pl
Hi Daniel, On 04.09.2014 01:34, Simon Glass wrote: This series imports get_maintainer.pl from kernel and reintroduce the MAINTAINERS file in the according format. Currently one have to manually grep all infos about board maintainers or custodians from various sources like git log, wiki or boards.cfg. get_maintainer.pl makes this task much easier. Also patman is already able to use it for cc-cmd. The MAINTAINERS file contains all custodians and is hand-written based on infos from wiki [1] and u-boot git forks [2]. Thus the source files infos (F:) are not complete yet. Furthermore status (S:) and maintainership (M:) for some custodian trees are probably wrong. Any help in completing and fixing that is appreciated. The get_maintainers.pl script is modified to scan multiple MAINTAINERS files in the board directory. This is required with the switch to Kconfig which adds a MAINTAINERS file per board. Examples: $ ./scripts/get_maintainer.pl --nogit-fallback -f board/sandbox/ Simon Glass s...@chromium.org (maintainer:SANDBOX BOARD) u-boot@lists.denx.de (open list) $ ./scripts/get_maintainer.pl --nogit-fallback -f arch/sandbox/ Simon Glass s...@chromium.org (maintainer:SANDBOX) u-boot@lists.denx.de (open list) $ ./scripts/get_maintainer.pl --nogit-fallback -f board/sandburst/metrobox/ Travis Sawyer travis.saw...@sandburst.com (orphan (since 2014-03):METROBOX BOARD) u-boot@lists.denx.de (open list) This series is also available at git://git.denx.de/u-boot-mips.git/maintainers_v3. Patman now picks this up which is great. But it does sometimes produce a long list of maintainers. I wonder if we could have an option to turn it off (perhaps -m)? Yes, that would be good. I just recently got a very long Cc list in my quite bit patchset. This definitely was too much and I had to send those patches manually instead of using patman. We need an option to disable this. Thanks, Stefan ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH][v2] powerpc/b4860: Updated default hwconfig so as to enable only
CPC1 is not being enabled by default as powerpc is supposed to use only CPC2. Though by editing hwconfig en_cpc option, CPC1 can also be enabled Signed-off-by: Shaveta Leekha shav...@freescale.com Signed-off-by: Sandeep Singh sand...@freescale.com --- Tested on B4860QDS Changes in V2: Inserted en_cpc:cpc2 at right place, not to broke into the settings for DDR include/configs/B4860QDS.h | 11 +-- 1 files changed, 9 insertions(+), 2 deletions(-) diff --git a/include/configs/B4860QDS.h b/include/configs/B4860QDS.h index 953d06b..6deb784 100644 --- a/include/configs/B4860QDS.h +++ b/include/configs/B4860QDS.h @@ -819,9 +819,16 @@ unsigned long get_board_ddr_clk(void); #define __USB_PHY_TYPE ulpi +#ifdef CONFIG_PPC_B4860 +#define HWCONFIG hwconfig=fsl_ddr:ctlr_intlv=null, \ + bank_intlv=cs0_cs1; \ + en_cpc:cpc2; +#else +#defineHWCONFIG hwconfig=fsl_ddr:ctlr_intlv=null,bank_intlv=cs0_cs1; +#endif + #defineCONFIG_EXTRA_ENV_SETTINGS \ - hwconfig=fsl_ddr:ctlr_intlv=null, \ - bank_intlv=cs0_cs1; \ + HWCONFIG\ usb1:dr_mode=host,phy_type= __stringify(__USB_PHY_TYPE) \0\ netdev=eth0\0 \ uboot= __stringify(CONFIG_UBOOTPATH) \0 \ -- 1.7.6.GIT ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH] cfi_flash: don't hide write/erase errors
Partially revert commit 0d01f66d235118 (CFI: cfi_flash write fix for AMD legacy). flash_full_status_check() used to skip status register parsing when flash_status_check() returns OK. This is wrong since flash_status_check() must return OK for other status bits to be valid. Cc: Ed Swarthout ed.swarth...@freescale.com Signed-off-by: Baruch Siach bar...@tkos.co.il --- drivers/mtd/cfi_flash.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c index c4b5bc1de553..9b3175d87fbd 100644 --- a/drivers/mtd/cfi_flash.c +++ b/drivers/mtd/cfi_flash.c @@ -593,7 +593,7 @@ static int flash_full_status_check (flash_info_t * info, flash_sect_t sector, case CFI_CMDSET_INTEL_PROG_REGIONS: case CFI_CMDSET_INTEL_EXTENDED: case CFI_CMDSET_INTEL_STANDARD: - if ((retcode != ERR_OK) + if ((retcode == ERR_OK) !flash_isequal (info, sector, 0, FLASH_STATUS_DONE)) { retcode = ERR_INVAL; printf (Flash %s error at address %lx\n, prompt, -- 2.1.0 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH] dfu, usb: set usb descriptor to values defined in dfu spec 1.1
set bDeviceClass, bDeviceSubClass and bcdUSB to the values defined in dfu spec 1.1 chapter 4.2.1 found here: http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf Signed-off-by: Heiko Schocher h...@denx.de Cc: Lukasz Majewski l.majew...@samsung.com Cc: Marek Vasut ma...@denx.de Cc: Roger Meier r.me...@siemens.com --- before this patch, dfu-util -l showed: Bus 002 Device 114: ID 0908:02c5 Siemens AG Device Descriptor: bLength18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass2 Communications bDeviceSubClass 2 Abstract (modem) bDeviceProtocol 0 None bMaxPacketSize064 idVendor 0x0908 Siemens AG idProduct 0x02c5 bcdDevice0.00 iManufacturer 1 Siemens AG with this patch: Bus 002 Device 089: ID 0908:02c5 Siemens AG Device Descriptor: bLength18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize064 idVendor 0x0908 Siemens AG idProduct 0x02c5 bcdDevice0.00 iManufacturer 1 Siemens AG iProduct2 USB download gadget which fits for bcdUSB, bDeviceClass and bDeviceSubClass with the DFU spezifikation. --- drivers/usb/gadget/f_dfu.c | 5 +++-- drivers/usb/gadget/g_dnl.c | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/usb/gadget/f_dfu.c b/drivers/usb/gadget/f_dfu.c index 9128add..9429e50 100644 --- a/drivers/usb/gadget/f_dfu.c +++ b/drivers/usb/gadget/f_dfu.c @@ -83,8 +83,9 @@ static struct usb_descriptor_header *dfu_runtime_descs[] = { static const struct usb_qualifier_descriptor dev_qualifier = { .bLength = sizeof dev_qualifier, .bDescriptorType = USB_DT_DEVICE_QUALIFIER, - .bcdUSB = __constant_cpu_to_le16(0x0200), - .bDeviceClass = USB_CLASS_VENDOR_SPEC, + .bcdUSB = __constant_cpu_to_le16(0x0110), + .bDeviceClass = USB_CLASS_PER_INTERFACE, + .bDeviceSubClass = 0x00, .bNumConfigurations = 1, }; diff --git a/drivers/usb/gadget/g_dnl.c b/drivers/usb/gadget/g_dnl.c index dd95afe..bcca965 100644 --- a/drivers/usb/gadget/g_dnl.c +++ b/drivers/usb/gadget/g_dnl.c @@ -57,9 +57,9 @@ static struct usb_device_descriptor device_desc = { .bLength = sizeof device_desc, .bDescriptorType = USB_DT_DEVICE, - .bcdUSB = __constant_cpu_to_le16(0x0200), - .bDeviceClass = USB_CLASS_COMM, - .bDeviceSubClass = 0x02, /*0x02:CDC-modem , 0x00:CDC-serial*/ + .bcdUSB = __constant_cpu_to_le16(0x0110), + .bDeviceClass = USB_CLASS_PER_INTERFACE, + .bDeviceSubClass = 0x00, /*0x02:CDC-modem , 0x00:CDC-serial*/ .idVendor = __constant_cpu_to_le16(CONFIG_G_DNL_VENDOR_NUM), .idProduct = __constant_cpu_to_le16(CONFIG_G_DNL_PRODUCT_NUM), -- 1.8.3.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH] B4860QDS: Enable mac command support
One of the I2C EEPROM is used to store/save and edit mac addresses of ports. this patch add required CONFIG to support the same Signed-off-by: Shaveta Leekha shav...@freescale.com --- include/configs/B4860QDS.h |1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/include/configs/B4860QDS.h b/include/configs/B4860QDS.h index 6deb784..9063c57 100644 --- a/include/configs/B4860QDS.h +++ b/include/configs/B4860QDS.h @@ -227,6 +227,7 @@ unsigned long get_board_ddr_clk(void); #endif /* EEPROM */ +#define CONFIG_ID_EEPROM #define CONFIG_SYS_I2C_EEPROM_NXID #define CONFIG_SYS_EEPROM_BUS_NUM 0 #define CONFIG_SYS_I2C_EEPROM_ADDR 0x57 -- 1.7.6.GIT ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] VxWorks Booting using U-boot as Bootloader
Hi, I was trying to boot vxworks using u-boot bootloader for learning purpose on MPC8640DHPCN board. Previously I successfully ported QNX os along with linux on same board using u-boot. while booting using bootvx command its not booting and stucking after showing the following message: tftp 0100 vxWorks Speed: 1000, full duplex Using eTSEC1 device TFTP from server 192.168.10.2; our IP address is 192.168.10.4 Filename 'vxWorks'. Load address: 0x100 Loading: *# # # 12.3 MiB/s done Bytes transferred = 2392432 (248170 hex) BOSSv2.0= bootvx 0010 100 ## Ethernet MAC address not copied to NV RAM ## Using bootline (@ 0x4200): root=/dev/nfs rw nfsroot=192.168.10.2:/opt/eldk-5.3/powerpc/rootfs-basic ip=192.168.10.4:192.168.10.2:192.168.10.1:255.255.255.0:Boss:eth0:off panic=1 console=ttyS0,115200 ## Starting vxWorks at 0x0010 ... please somebody provide me some link or any pointer to help me get more understanding about booting multiple os using uboot. ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3 0/4] introduce get_maintainer.pl
Hi. 2014-09-04 15:05 GMT+09:00 Stefan Roese s...@denx.de: Patman now picks this up which is great. But it does sometimes produce a long list of maintainers. I wonder if we could have an option to turn it off (perhaps -m)? Yes, that would be good. I just recently got a very long Cc list in my quite bit patchset. This definitely was too much and I had to send those patches manually instead of using patman. We need an option to disable this. Me too. I sometimes delete get_maintainer.pl before I use patman to avoid a big Cc list. $ rm scripts/get_maintainer.pl $ tools/patman/patman ... $ git checkout scripts/get_maintainer.pl I agree with '-m' option. -- Best Regards Masahiro Yamada ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v2 2/4] kconfig: fix whitespace handling bug of savedefconfig
Hi Simon, 2014-09-04 8:49 GMT+09:00 Simon Glass s...@chromium.org: Hi Masahiro, On 3 September 2014 14:41, Masahiro Yamada yamad...@jp.panasonic.com wrote: Commit 3ff291f371fa9858426774f3732924bacb61ed1c (kconfig: convert Kconfig helper script into a shell script) introduced another regression. Shell usually handles whitespaces as separators, so make saveconfig outputs # CONFIG_FOO is not set into: # CONFIG_FOO is not set Whitespaces should not be treated as separators here. Oh dear...python is so much better at dealing with parameters and strings. Shell script is much more difficult than Python (and Perl) for text processing. This is really unfortunate... -- Best Regards Masahiro Yamada ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v2] kconfig: show an error message when defconfig is not found
When a non-existing defconfig is specified, display an easy-to-understand message (fake the error message on Linux Kernel): $ make foo_defconfig *** *** Can't find default configuration confis/foo_defconfig! *** Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com --- Changes in v2: - Echo the error message to stderr scripts/multiconfig.sh | 7 +++ 1 file changed, 7 insertions(+) diff --git a/scripts/multiconfig.sh b/scripts/multiconfig.sh index a579042..49fcfad 100644 --- a/scripts/multiconfig.sh +++ b/scripts/multiconfig.sh @@ -118,6 +118,13 @@ do_board_defconfig () { defconfig_path=$srctree/configs/$1 tmp_defconfig_path=configs/.tmp_defconfig + if [ ! -r $defconfig_path ]; then + echo 2 *** + echo 2 *** Can't find default configuration \confis/$1\! + echo 2 *** + exit 1 + fi + mkdir -p arch configs # defconfig for Normal: # pick lines without prefixes and lines starting '+' prefix -- 1.9.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [U-boot] [Patch 2/6] ARM: keystone2: clock: add K2E clock support
On 07/15/2014 05:59 PM, Ivan Khoronzhuk wrote: From: Hao Zhanghzh...@ti.com This patch adds clock definitions and commands to support Keystone2 K2E SOC. Signed-off-by: Hao Zhanghzh...@ti.com Signed-off-by: Ivan Khoronzhukivan.khoronz...@ti.com --- arch/arm/cpu/armv7/keystone/Makefile | 1 + arch/arm/cpu/armv7/keystone/clock-k2e.c| 101 + arch/arm/cpu/armv7/keystone/clock.c| 2 + arch/arm/cpu/armv7/keystone/cmd_clock.c| 31 ++-- arch/arm/include/asm/arch-keystone/clock-k2e.h | 68 + arch/arm/include/asm/arch-keystone/clock.h | 4 + include/configs/ks2_evm.h | 2 +- 7 files changed, 203 insertions(+), 6 deletions(-) create mode 100644 arch/arm/cpu/armv7/keystone/clock-k2e.c create mode 100644 arch/arm/include/asm/arch-keystone/clock-k2e.h diff --git a/arch/arm/cpu/armv7/keystone/Makefile b/arch/arm/cpu/armv7/keystone/Makefile index 74c5160..f8519c0 100644 --- a/arch/arm/cpu/armv7/keystone/Makefile +++ b/arch/arm/cpu/armv7/keystone/Makefile @@ -9,6 +9,7 @@ obj-y += init.o obj-y += psc.o obj-y += clock.o obj-$(CONFIG_SOC_K2HK) += clock-k2hk.o +obj-$(CONFIG_SOC_K2E) += clock-k2e.o obj-y += cmd_clock.o obj-y += cmd_mon.o obj-$(CONFIG_DRIVER_TI_KEYSTONE_NET) += keystone_nav.o diff --git a/arch/arm/cpu/armv7/keystone/clock-k2e.c b/arch/arm/cpu/armv7/keystone/clock-k2e.c new file mode 100644 index 000..42092e1 --- /dev/null +++ b/arch/arm/cpu/armv7/keystone/clock-k2e.c @@ -0,0 +1,101 @@ +/* + * Keystone2: get clk rate for K2E + * + * (C) Copyright 2012-2014 + * Texas Instruments Incorporated,www.ti.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#includecommon.h +#includeasm/arch/clock.h +#includeasm/arch/clock_defs.h + +const struct keystone_pll_regs keystone_pll_regs[] = { + [CORE_PLL] = {KS2_MAINPLLCTL0, KS2_MAINPLLCTL1}, + [PASS_PLL] = {KS2_PASSPLLCTL0, KS2_PASSPLLCTL1}, + [DDR3_PLL] = {KS2_DDR3APLLCTL0, KS2_DDR3APLLCTL1}, +}; + +/** + * pll_freq_get - get pll frequency + * Fout = Fref * NF(mult) / NR(prediv) / OD + * @pll: pll identifier + */ +static unsigned long pll_freq_get(int pll) +{ + unsigned long mult = 1, prediv = 1, output_div = 2; + unsigned long ret; + u32 tmp, reg; + + if (pll == CORE_PLL) { + ret = external_clk[sys_clk]; + if (pllctl_reg_read(pll, ctl) PLLCTL_PLLEN) { + /* PLL mode */ + tmp = __raw_readl(KS2_MAINPLLCTL0); + prediv = (tmp PLL_DIV_MASK) + 1; + mult = (((tmp PLLM_MULT_HI_SMASK) 6) | + (pllctl_reg_read(pll, mult) + PLLM_MULT_LO_MASK)) + 1; + output_div = ((pllctl_reg_read(pll, secctl) + PLL_CLKOD_SHIFT) PLL_CLKOD_MASK) + 1; + + ret = ret / prediv / output_div * mult; + } + } else { + switch (pll) { + case PASS_PLL: + ret = external_clk[pa_clk]; + reg = KS2_PASSPLLCTL0; + break; + case DDR3_PLL: + ret = external_clk[ddr3_clk]; + reg = KS2_DDR3APLLCTL0; + break; + default: + return 0; + } + + tmp = __raw_readl(reg); + Please remove this line as below is part of this and should be in a block IMO. With this change, Acked-by: Murali Karicheri m-kariche...@ti.com + if (!(tmp PLLCTL_BYPASS)) { + /* Bypass disabled */ + prediv = (tmp PLL_DIV_MASK) + 1; + mult = ((tmp PLL_MULT_SHIFT) PLL_MULT_MASK) + 1; + output_div = ((tmp PLL_CLKOD_SHIFT) + PLL_CLKOD_MASK) + 1; + ret = ((ret / prediv) * mult) / output_div; + } + } + + return ret; +} + +unsigned long clk_get_rate(unsigned int clk) +{ + switch (clk) { + case core_pll_clk: return pll_freq_get(CORE_PLL); + case pass_pll_clk: return pll_freq_get(PASS_PLL); + case ddr3_pll_clk: return pll_freq_get(DDR3_PLL); + case sys_clk0_1_clk: + case sys_clk0_clk: return pll_freq_get(CORE_PLL) / pll0div_read(1); + case sys_clk1_clk: return pll_freq_get(CORE_PLL) / pll0div_read(2); + case sys_clk2_clk: return pll_freq_get(CORE_PLL) / pll0div_read(3); + case sys_clk3_clk: return pll_freq_get(CORE_PLL) / pll0div_read(4); + case sys_clk0_2_clk:return clk_get_rate(sys_clk0_clk) / 2; + case sys_clk0_3_clk:return clk_get_rate(sys_clk0_clk) / 3; + case sys_clk0_4_clk:return clk_get_rate(sys_clk0_clk) / 4; + case sys_clk0_6_clk:
[U-Boot] [PATCH v2 3/5] iMX6DL:arm2: Add support for i.MX6DL arm2 DDR3 board
This patch adds the i.MX6DL arm2 board support. The i.MX6DL ARM2 shared the same board with i.MX6Q ARM2 board since the i.MX6DL is pin-pin compatible with i.MX6Q. The patch also support the DDR 32-BIT mode option. Please define CONFIG_DDR_32BIT in the board configure file to enable DDR 32-BIT mode.But due to the board design, it's 64bit DDR buswidth physically, so, if you CONFIG_DDR_32BIT, the DDR memory size will be half of it. Signed-off-by: Ye.Li b37...@freescale.com --- Changes since v1: - None board/freescale/mx6qarm2/imximage_mx6dl.cfg | 143 +++ board/freescale/mx6qarm2/mx6qarm2.c |4 + configs/mx6dlarm2_defconfig |3 + configs/mx6qarm2_defconfig |2 +- include/configs/mx6qarm2.h |5 +- 5 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 board/freescale/mx6qarm2/imximage_mx6dl.cfg create mode 100644 configs/mx6dlarm2_defconfig diff --git a/board/freescale/mx6qarm2/imximage_mx6dl.cfg b/board/freescale/mx6qarm2/imximage_mx6dl.cfg new file mode 100644 index 000..eef723c --- /dev/null +++ b/board/freescale/mx6qarm2/imximage_mx6dl.cfg @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2014 Freescale Semiconductor, Inc. + * Jason Liu r64...@freescale.com + * + * SPDX-License-Identifier:GPL-2.0+ + * + * Refer doc/README.imximage for more details about how-to configure + * and create imximage boot image + * + * The syntax is taken as close as possible with the kwbimage + */ + +/* image version */ +IMAGE_VERSION 2 + +/* + * Boot Device : one of + * spi, sd (the board has no nand neither onenand) + */ +BOOT_FROM sd + +/* + * Device Configuration Data (DCD) + * + * Each entry must have the format: + * Addr-type AddressValue + * + * where: + * Addr-type register length (1,2 or 4 bytes) + * Address absolute address of the register + * value value to be stored in the register + */ +DATA 4 0x020e0798 0x000c +DATA 4 0x020e0758 0x +DATA 4 0x020e0588 0x0030 +DATA 4 0x020e0594 0x0030 +DATA 4 0x020e056c 0x0030 +DATA 4 0x020e0578 0x0030 +DATA 4 0x020e074c 0x0030 +DATA 4 0x020e057c 0x0030 +DATA 4 0x020e0590 0x3000 +DATA 4 0x020e0598 0x3000 +DATA 4 0x020e058c 0x +DATA 4 0x020e059c 0x3030 +DATA 4 0x020e05a0 0x3030 +DATA 4 0x020e078c 0x0030 +DATA 4 0x020e0750 0x0002 +DATA 4 0x020e05a8 0x0030 +DATA 4 0x020e05b0 0x0030 +DATA 4 0x020e0524 0x0030 +DATA 4 0x020e051c 0x0030 +DATA 4 0x020e0518 0x0030 +DATA 4 0x020e050c 0x0030 +DATA 4 0x020e05b8 0x0030 +DATA 4 0x020e05c0 0x0030 +DATA 4 0x020e0774 0x0002 +DATA 4 0x020e0784 0x0030 +DATA 4 0x020e0788 0x0030 +DATA 4 0x020e0794 0x0030 +DATA 4 0x020e079c 0x0030 +DATA 4 0x020e07a0 0x0030 +DATA 4 0x020e07a4 0x0030 +DATA 4 0x020e07a8 0x0030 +DATA 4 0x020e0748 0x0030 +DATA 4 0x020e05ac 0x0030 +DATA 4 0x020e05b4 0x0030 +DATA 4 0x020e0528 0x0030 +DATA 4 0x020e0520 0x0030 +DATA 4 0x020e0514 0x0030 +DATA 4 0x020e0510 0x0030 +DATA 4 0x020e05bc 0x0030 +DATA 4 0x020e05c4 0x0030 + +DATA 4 0x021b0800 0xa1390003 +DATA 4 0x021b4800 0xa1390003 +DATA 4 0x021b080c 0x001F001F +DATA 4 0x021b0810 0x001F001F +DATA 4 0x021b480c 0x00370037 +DATA 4 0x021b4810 0x00370037 +DATA 4 0x021b083c 0x422f0220 +DATA 4 0x021b0840 0x021f0219 +DATA 4 0x021b483C 0x422f0220 +DATA 4 0x021b4840 0x022d022f +DATA 4 0x021b0848 0x47494b49 +DATA 4 0x021b4848 0x48484c47 +DATA 4 0x021b0850 0x39382b2f +DATA 4 0x021b4850 0x2f35312c +DATA 4 0x021b081c 0x +DATA 4 0x021b0820 0x +DATA 4 0x021b0824 0x +DATA 4 0x021b0828 0x +DATA 4 0x021b481c 0x +DATA 4 0x021b4820 0x +DATA 4 0x021b4824 0x +DATA 4 0x021b4828 0x +DATA 4 0x021b08b8 0x0800 +DATA 4 0x021b48b8 0x0800 +DATA 4 0x021b0004 0x0002002d +DATA 4 0x021b0008 0x00333030 + +DATA 4 0x021b000c 0x40445323 +DATA 4 0x021b0010 0xb66e8c63 + +DATA 4 0x021b0014 0x01ff00db +DATA 4 0x021b0018 0x00081740 +DATA 4 0x021b001c 0x8000 +DATA 4 0x021b002c 0x26d2 +DATA 4 0x021b0030 0x00440e21 +#ifdef CONFIG_DDR_32BIT +DATA 4 0x021b0040 0x0017 +DATA 4 0x021b 0xc319 +#else +DATA 4 0x021b0040 0x0027 +DATA 4 0x021b 0xc31a +#endif +DATA 4 0x021b001c 0x04008032 +DATA 4 0x021b001c 0x0400803a +DATA 4 0x021b001c 0x8033 +DATA 4 0x021b001c 0x803b +DATA 4 0x021b001c 0x00428031 +DATA 4 0x021b001c 0x00428039 +DATA 4 0x021b001c 0x07208030 +DATA 4 0x021b001c 0x07208038 +DATA 4 0x021b001c 0x04008040 +DATA 4 0x021b001c 0x04008048 +DATA 4 0x021b0020 0x5800 +DATA 4 0x021b0818 0x0007 +DATA 4 0x021b4818 0x0007 +DATA 4 0x021b0004 0x0002556d +DATA 4 0x021b4004 0x00011006 +DATA 4 0x021b001c 0x + +DATA 4 0x020c4068 0x00C03F3F +DATA 4 0x020c406c 0x0030FC03 +DATA 4 0x020c4070 0x0FFFC000 +DATA 4 0x020c4074 0x3FF0 +DATA 4 0x020c4078 0x00FFF300 +DATA 4 0x020c407c 0x0FC3 +DATA 4
[U-Boot] [PATCH v2 1/5] iMX6Q:arm2: Add the kernel FDT Loading support
To support loading FDT file for kernel, add the fdt address, file and loading script to arm2 board default environment. Signed-off-by: Ye.Li b37...@freescale.com --- Changes since v1: - None include/configs/mx6qarm2.h | 41 ++--- 1 files changed, 38 insertions(+), 3 deletions(-) diff --git a/include/configs/mx6qarm2.h b/include/configs/mx6qarm2.h index fd651cf..f633525 100644 --- a/include/configs/mx6qarm2.h +++ b/include/configs/mx6qarm2.h @@ -67,15 +67,19 @@ #define CONFIG_BOOTDELAY 3 -#define CONFIG_LOADADDR0x1080 +#define CONFIG_LOADADDR0x1200 #define CONFIG_SYS_TEXT_BASE 0x1780 #define CONFIG_EXTRA_ENV_SETTINGS \ script=boot.scr\0 \ image=zImage\0 \ console=ttymxc3\0 \ + fdt_file=imx6q-arm2.dtb\0 \ + fdt_addr=0x1800\0 \ fdt_high=0x\0 \ initrd_high=0x\0 \ + boot_fdt=try\0 \ + ip_dyn=yes\0 \ mmcdev=1\0 \ mmcpart=2\0 \ mmcroot=/dev/mmcblk0p3 rootwait rw\0 \ @@ -86,15 +90,46 @@ bootscript=echo Running bootscript from mmc ...; \ source\0 \ loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0 \ + loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0 \ mmcboot=echo Booting from mmc ...; \ run mmcargs; \ - bootz\0 \ + if test ${boot_fdt} = yes || test ${boot_fdt} = try; then \ + if run loadfdt; then \ + bootz ${loadaddr} - ${fdt_addr}; \ + else \ + if test ${boot_fdt} = try; then \ + bootz; \ + else \ + echo WARN: Cannot load the DT; \ + fi; \ + fi; \ + else \ + bootz; \ + fi;\0 \ netargs=setenv bootargs console=${console},${baudrate} \ root=/dev/nfs \ ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0 \ netboot=echo Booting from net ...; \ run netargs; \ - dhcp ${image}; bootz\0 \ + if test ${ip_dyn} = yes; then \ + setenv get_cmd dhcp; \ + else \ + setenv get_cmd tftp; \ + fi; \ + ${get_cmd} ${image}; \ + if test ${boot_fdt} = yes || test ${boot_fdt} = try; then \ + if ${get_cmd} ${fdt_addr} ${fdt_file}; then \ + bootz ${loadaddr} - ${fdt_addr}; \ + else \ + if test ${boot_fdt} = try; then \ + bootz; \ + else \ + echo WARN: Cannot load the DT; \ + fi; \ + fi; \ + else \ + bootz; \ + fi;\0 #define CONFIG_BOOTCOMMAND \ mmc dev ${mmcdev}; \ -- 1.7.4.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v2 5/5] iMX6Q/DL:arm2: Add support for i.MX6Q/DL arm2 LPDDR2 boards
Update the ddr scripts for LPDDR2 and add two build configs for LPDDR2 arm2 board. Since the LPDDR2 arm2 board has different DDR size, use CONFIG_DDR_MB in defconfig to replace the PHYS_SDRAM_SIZE. Signed-off-by: Ye.Li b37...@freescale.com --- Changes since v1: - The (CONFIG_DDR_32BIT) is true only for mx6dlarm2 board/freescale/mx6qarm2/imximage.cfg | 189 +++- board/freescale/mx6qarm2/imximage_mx6dl.cfg | 319 +++ board/freescale/mx6qarm2/mx6qarm2.c |7 +- configs/mx6dlarm2_defconfig |2 +- configs/mx6dlarm2_lpddr2_defconfig |3 + configs/mx6qarm2_defconfig |2 +- configs/mx6qarm2_lpddr2_defconfig |3 + include/configs/mx6qarm2.h |5 - 8 files changed, 516 insertions(+), 14 deletions(-) create mode 100644 configs/mx6dlarm2_lpddr2_defconfig create mode 100644 configs/mx6qarm2_lpddr2_defconfig diff --git a/board/freescale/mx6qarm2/imximage.cfg b/board/freescale/mx6qarm2/imximage.cfg index 710f34d..c85bde5 100644 --- a/board/freescale/mx6qarm2/imximage.cfg +++ b/board/freescale/mx6qarm2/imximage.cfg @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 Freescale Semiconductor, Inc. + * Copyright (C) 2011-2014 Freescale Semiconductor, Inc. * Jason Liu r64...@freescale.com * * SPDX-License-Identifier:GPL-2.0+ @@ -30,6 +30,185 @@ BOOT_FROM sd * Address absolute address of the register * value value to be stored in the register */ +#ifdef CONFIG_MX6DQ_LPDDR2 +/* DCD */ +DATA 4 0x020C4018 0x60324 + +DATA 4 0x020E05a8 0x3038 +DATA 4 0x020E05b0 0x3038 +DATA 4 0x020E0524 0x3038 +DATA 4 0x020E051c 0x3038 + +DATA 4 0x020E0518 0x3038 +DATA 4 0x020E050c 0x3038 +DATA 4 0x020E05b8 0x3038 +DATA 4 0x020E05c0 0x3038 + +DATA 4 0x020E05ac 0x0038 +DATA 4 0x020E05b4 0x0038 +DATA 4 0x020E0528 0x0038 +DATA 4 0x020E0520 0x0038 + +DATA 4 0x020E0514 0x0038 +DATA 4 0x020E0510 0x0038 +DATA 4 0x020E05bc 0x0038 +DATA 4 0x020E05c4 0x0038 + +DATA 4 0x020E056c 0x0038 +DATA 4 0x020E0578 0x0038 +DATA 4 0x020E0588 0x0038 +DATA 4 0x020E0594 0x0038 + +DATA 4 0x020E057c 0x0038 +DATA 4 0x020E0590 0x0038 +DATA 4 0x020E0598 0x0038 +DATA 4 0x020E058c 0x + +DATA 4 0x020E059c 0x0038 +DATA 4 0x020E05a0 0x0038 +DATA 4 0x020E0784 0x0038 +DATA 4 0x020E0788 0x0038 + +DATA 4 0x020E0794 0x0038 +DATA 4 0x020E079c 0x0038 +DATA 4 0x020E07a0 0x0038 +DATA 4 0x020E07a4 0x0038 + +DATA 4 0x020E07a8 0x0038 +DATA 4 0x020E0748 0x0038 +DATA 4 0x020E074c 0x0038 +DATA 4 0x020E0750 0x0002 + +DATA 4 0x020E0758 0x +DATA 4 0x020E0774 0x0002 +DATA 4 0x020E078c 0x0038 +DATA 4 0x020E0798 0x0008 + +DATA 4 0x021b001c 0x8000 +DATA 4 0x021b401c 0x8000 + +DATA 4 0x021b085c 0x1b5f01ff +DATA 4 0x021b485c 0x1b5f01ff + +DATA 4 0x021b0800 0xa139 +DATA 4 0x021b4800 0xa139 + +DATA 4 0x021b0890 0x0040 +DATA 4 0x021b4890 0x0040 + +DATA 4 0x021b48bc 0x0005 + +DATA 4 0x021b08b8 0x0800 +DATA 4 0x021b48b8 0x0800 + +DATA 4 0x021b081c 0x +DATA 4 0x021b0820 0x +DATA 4 0x021b0824 0x +DATA 4 0x021b0828 0x +DATA 4 0x021b481c 0x +DATA 4 0x021b4820 0x +DATA 4 0x021b4824 0x +DATA 4 0x021b4828 0x + +DATA 4 0x021b082c 0xf333 +DATA 4 0x021b0830 0xf333 +DATA 4 0x021b0834 0xf333 +DATA 4 0x021b0838 0xf333 +DATA 4 0x021b482c 0xf333 +DATA 4 0x021b4830 0xf333 +DATA 4 0x021b4834 0xf333 +DATA 4 0x021b4838 0xf333 + +DATA 4 0x021b0848 0x49383b39 +DATA 4 0x021b0850 0x30364738 +DATA 4 0x021b4848 0x3e3c3846 +DATA 4 0x021b4850 0x4c294b35 + +DATA 4 0x021b083c 0x2000 +DATA 4 0x021b0840 0x0 +DATA 4 0x021b483c 0x2000 +DATA 4 0x021b4840 0x0 + +DATA 4 0x021b0858 0xf00 +DATA 4 0x021b4858 0xf00 + +DATA 4 0x021b08b8 0x800 +DATA 4 0x021b48b8 0x800 + +DATA 4 0x021b000c 0x555a61a5 +DATA 4 0x021b0004 0x20036 +DATA 4 0x021b0010 0x160e83 +DATA 4 0x021b0014 0xdd +DATA 4 0x021b0018 0x8174c +DATA 4 0x021b002c 0xf9f26d2 +DATA 4 0x021b0030 0x20e +DATA 4 0x021b0038 0x200aac +DATA 4 0x021b0008 0x0 + +DATA 4 0x021b0040 0x5f + +DATA 4 0x021b 0xc301 + +DATA 4 0x021b400c 0x555a61a5 +DATA 4 0x021b4004 0x20036 +DATA 4 0x021b4010 0x160e83 +DATA 4 0x021b4014 0xdd +DATA 4 0x021b4018 0x8174c +DATA 4 0x021b402c 0xf9f26d2 +DATA 4 0x021b4030 0x20e +DATA 4 0x021b4038 0x200aac +DATA 4 0x021b4008 0x0 + +DATA 4 0x021b4040 0x3f +DATA 4 0x021b4000 0xc301 + +DATA 4 0x021b001c 0x3f8030 +DATA 4 0x021b001c 0xff0a8030 +DATA 4 0x021b001c 0xc2018030 +DATA 4 0x021b001c 0x6028030 +DATA 4 0x021b001c 0x2038030 + +DATA 4 0x021b401c 0x3f8030 +DATA 4 0x021b401c 0xff0a8030 +DATA 4 0x021b401c 0xc2018030 +DATA 4 0x021b401c 0x6028030 +DATA 4 0x021b401c 0x2038030 + +DATA 4 0x021b0800 0xa1390003 +DATA 4 0x021b4800 0xa1390003 + +DATA 4 0x021b0020 0x7800 +DATA 4 0x021b4020 0x7800 + +DATA 4 0x021b0818
[U-Boot] [PATCH v2 2/5] iMX6Q:arm2: Change the mmcroot and mmcpart env value
1. Set the image load partition to the first FAT partition. 2. Set the kernel rootfs partition to the second partition. Signed-off-by: Ye.Li b37...@freescale.com --- Changes since v1: - None include/configs/mx6qarm2.h |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/configs/mx6qarm2.h b/include/configs/mx6qarm2.h index f633525..97329a3 100644 --- a/include/configs/mx6qarm2.h +++ b/include/configs/mx6qarm2.h @@ -81,8 +81,8 @@ boot_fdt=try\0 \ ip_dyn=yes\0 \ mmcdev=1\0 \ - mmcpart=2\0 \ - mmcroot=/dev/mmcblk0p3 rootwait rw\0 \ + mmcpart=1\0 \ + mmcroot=/dev/mmcblk0p2 rootwait rw\0 \ mmcargs=setenv bootargs console=${console},${baudrate} \ root=${mmcroot}\0 \ loadbootscript= \ -- 1.7.4.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v2 4/5] iMX6: Checking PLL2 PFD0 and PFD2 for periph_clk before PFD reset
Checking the pre_periph_clk_sel and pre_periph2_clk of CCM CBCMR register, if the PLL2 PFD0 or PLL2 PFD2 is used for the clock source, do not reset this PFD to avoid system hang. Customers may set this in DDR script or use BT_FREQ to select low freq boot. Signed-off-by: Ye.Li b37...@freescale.com --- Changes since v1: - Add this patch before support LPDDR2 ARM2 board, because LPDDR2 use 400Mhz - DDR and set pre_periph_clk_sel to PLL2 PFD2. So we can't reset PFD2. arch/arm/cpu/armv7/mx6/soc.c | 24 1 files changed, 16 insertions(+), 8 deletions(-) diff --git a/arch/arm/cpu/armv7/mx6/soc.c b/arch/arm/cpu/armv7/mx6/soc.c index ac84a1f..fd87162 100644 --- a/arch/arm/cpu/armv7/mx6/soc.c +++ b/arch/arm/cpu/armv7/mx6/soc.c @@ -339,10 +339,10 @@ const struct boot_mode soc_boot_modes[] = { void s_init(void) { struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR; - int is_6q = is_cpu_type(MXC_CPU_MX6Q); + struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; u32 mask480; u32 mask528; - + u32 reg, periph1, periph2; if (is_cpu_type(MXC_CPU_MX6SX)) return; @@ -357,15 +357,23 @@ void s_init(void) ANATOP_PFD_CLKGATE_MASK(1) | ANATOP_PFD_CLKGATE_MASK(2) | ANATOP_PFD_CLKGATE_MASK(3); - mask528 = ANATOP_PFD_CLKGATE_MASK(0) | - ANATOP_PFD_CLKGATE_MASK(1) | + mask528 = ANATOP_PFD_CLKGATE_MASK(1) | ANATOP_PFD_CLKGATE_MASK(3); - /* -* Don't reset PFD2 on DL/S -*/ - if (is_6q) + reg = readl(ccm-cbcmr); + periph2 = ((reg MXC_CCM_CBCMR_PRE_PERIPH2_CLK_SEL_MASK) +MXC_CCM_CBCMR_PRE_PERIPH2_CLK_SEL_OFFSET); + periph1 = ((reg MXC_CCM_CBCMR_PRE_PERIPH_CLK_SEL_MASK) +MXC_CCM_CBCMR_PRE_PERIPH_CLK_SEL_OFFSET); + + /* Checking if PLL2 PFD0 or PLL2 PFD2 is using for periph clock */ + if ((periph2 != 0x2) (periph1 != 0x2)) + mask528 |= ANATOP_PFD_CLKGATE_MASK(0); + + if ((periph2 != 0x1) (periph1 != 0x1) + (periph2 != 0x3) (periph1 != 0x3)) mask528 |= ANATOP_PFD_CLKGATE_MASK(2); + writel(mask480, anatop-pfd_480_set); writel(mask528, anatop-pfd_528_set); writel(mask480, anatop-pfd_480_clr); -- 1.7.4.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH] MAINTAINERS: update the maintainer of Arndale board
Hello Mikyu, Could you pick up this patch, please? I think there is a consensus that the maintainership of Arndale board should be updated. Please see http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/187338 2014-08-04 10:13 GMT+09:00 Masahiro Yamada yamad...@jp.panasonic.com: Inderpal's email address is not working any more. Chander will be a new maintainer. Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com Cc: Chander Kashyap k.chan...@samsung.com Cc: Minkyu Kang mk7.k...@samsung.com --- A new maintainer was assigned to Arndale board. But nobody wouldn't send a patch. Please see http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/187338 board/samsung/arndale/MAINTAINERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/board/samsung/arndale/MAINTAINERS b/board/samsung/arndale/MAINTAINERS index 0a01a07..7dc1785 100644 --- a/board/samsung/arndale/MAINTAINERS +++ b/board/samsung/arndale/MAINTAINERS @@ -1,5 +1,5 @@ ARNDALE BOARD -M: Inderpal Singh inderpal.si...@linaro.org +M: Chander Kashyap k.chan...@samsung.com S: Maintained F: board/samsung/arndale/ F: include/configs/arndale.h -- -- Best Regards Masahiro Yamada ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3 3/4] cleanup code which handles the Android sparse image format
On Thu, Sep 04, 2014 at 07:28:04AM +0200, Wolfgang Denk wrote: Dear Steve Rae, In message 1409763954-5494-4-git-send-email-s...@broadcom.com you wrote: - port dprintf() to debug() - update formatting Signed-off-by: Steve Rae s...@broadcom.com --- Changes in v3: - use original license text Changes in v2: - use BSD-3-Clause common/aboot.c | 97 +- 1 file changed, 56 insertions(+), 41 deletions(-) diff --git a/common/aboot.c b/common/aboot.c index a302c92..3611feb 100644 --- a/common/aboot.c +++ b/common/aboot.c @@ -28,6 +28,9 @@ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * + * NOTE: + * Although it is very similar, this license text is not identical + * to the BSD-3-Clause, therefore, DO NOT MODIFY THIS LICENSE TEXT! */ I understand your intention of starting with the pristine file, and then adaptng it to U-Boot, but I don't like adding a broken file in patch 1/4 only to fix it later in patch 3/4. I think it would be better to squash these patches. But it would make tracking things a bit harder. We could squash 2/4 and 3/4 into one easy enough tho. Second, as already mentioned, we need to assign a SPDX ID for this. Did you check with SPDX if there a matching ID? So, we've gone round-and-round on this, and Steve is doing what I asked him to here. In sum, this is _not_ BSD-3, it's a one-off from it with some interesting wording changes that mean we can't just call it BSD-3. Since there's nothing else going to use this (and frankly I'm mildly puzzled by how hard it is to dig up an aboot.c with sparse image support that doesn't have this change but also does come from a google domain) I didn't want to add a new license file for this non-standard license. -- Tom signature.asc Description: Digital signature ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v2] kconfig: show an error message when defconfig is not found
On 09/04/2014 07:16 AM, Masahiro Yamada wrote: When a non-existing defconfig is specified, display an easy-to-understand message (fake the error message on Linux Kernel): $ make foo_defconfig *** *** Can't find default configuration confis/foo_defconfig! *** Acked-by: Stephen Warren swar...@nvidia.com ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] Call for participation in the U-Boot Mini Summit 2014
On Wednesday, September 03, 2014 at 06:39:23 PM, Detlev Zundel wrote: Hi Marek, [...] I got my talk, Secure and flexible boot with U-Boot bootloader, accepted for the main track it seems. It's mostly about use fitImage and use UBI on NAND kind of talk, which covers introduction to fitImage and storing system components on UBI/UBIFS to prevent problems like silent data corruption on modern systems. Excellent! That being said, I believe I won't be able to cover the fitImage verified boot part properly, so I might as well cook a talk for the u-boot summit about this advanced topic. We had a talk about that exact topic last year on the main track by Simon and in the mini summit by Jagan Teki[1]. In what respect will your talk differ from that? I believe there is never enough advertising when it comes to fitImage, since we want to get rid of uImage. On the other hand, I see no point in artificially filling the talk slots, so consider my offer only as a backup solution. Best regards, Marek Vasut ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [U-boot] [Patch 2/6] ARM: keystone2: clock: add K2E clock support
On 09/04/2014 05:08 PM, Murali Karicheri wrote: On 07/15/2014 05:59 PM, Ivan Khoronzhuk wrote: From: Hao Zhanghzh...@ti.com This patch adds clock definitions and commands to support Keystone2 K2E SOC. Signed-off-by: Hao Zhanghzh...@ti.com Signed-off-by: Ivan Khoronzhukivan.khoronz...@ti.com --- arch/arm/cpu/armv7/keystone/Makefile | 1 + arch/arm/cpu/armv7/keystone/clock-k2e.c| 101 + arch/arm/cpu/armv7/keystone/clock.c| 2 + arch/arm/cpu/armv7/keystone/cmd_clock.c| 31 ++-- arch/arm/include/asm/arch-keystone/clock-k2e.h | 68 + arch/arm/include/asm/arch-keystone/clock.h | 4 + include/configs/ks2_evm.h | 2 +- 7 files changed, 203 insertions(+), 6 deletions(-) create mode 100644 arch/arm/cpu/armv7/keystone/clock-k2e.c create mode 100644 arch/arm/include/asm/arch-keystone/clock-k2e.h diff --git a/arch/arm/cpu/armv7/keystone/Makefile b/arch/arm/cpu/armv7/keystone/Makefile index 74c5160..f8519c0 100644 --- a/arch/arm/cpu/armv7/keystone/Makefile +++ b/arch/arm/cpu/armv7/keystone/Makefile @@ -9,6 +9,7 @@ obj-y+= init.o obj-y+= psc.o obj-y+= clock.o obj-$(CONFIG_SOC_K2HK) += clock-k2hk.o +obj-$(CONFIG_SOC_K2E) += clock-k2e.o obj-y+= cmd_clock.o obj-y+= cmd_mon.o obj-$(CONFIG_DRIVER_TI_KEYSTONE_NET) += keystone_nav.o diff --git a/arch/arm/cpu/armv7/keystone/clock-k2e.c b/arch/arm/cpu/armv7/keystone/clock-k2e.c new file mode 100644 index 000..42092e1 --- /dev/null +++ b/arch/arm/cpu/armv7/keystone/clock-k2e.c @@ -0,0 +1,101 @@ +/* + * Keystone2: get clk rate for K2E + * + * (C) Copyright 2012-2014 + * Texas Instruments Incorporated,www.ti.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#includecommon.h +#includeasm/arch/clock.h +#includeasm/arch/clock_defs.h + +const struct keystone_pll_regs keystone_pll_regs[] = { +[CORE_PLL] = {KS2_MAINPLLCTL0, KS2_MAINPLLCTL1}, +[PASS_PLL] = {KS2_PASSPLLCTL0, KS2_PASSPLLCTL1}, +[DDR3_PLL] = {KS2_DDR3APLLCTL0, KS2_DDR3APLLCTL1}, +}; + +/** + * pll_freq_get - get pll frequency + * Fout = Fref * NF(mult) / NR(prediv) / OD + * @pll:pll identifier + */ +static unsigned long pll_freq_get(int pll) +{ +unsigned long mult = 1, prediv = 1, output_div = 2; +unsigned long ret; +u32 tmp, reg; + +if (pll == CORE_PLL) { +ret = external_clk[sys_clk]; +if (pllctl_reg_read(pll, ctl) PLLCTL_PLLEN) { +/* PLL mode */ +tmp = __raw_readl(KS2_MAINPLLCTL0); +prediv = (tmp PLL_DIV_MASK) + 1; +mult = (((tmp PLLM_MULT_HI_SMASK) 6) | +(pllctl_reg_read(pll, mult) +PLLM_MULT_LO_MASK)) + 1; +output_div = ((pllctl_reg_read(pll, secctl) + PLL_CLKOD_SHIFT) PLL_CLKOD_MASK) + 1; + +ret = ret / prediv / output_div * mult; +} +} else { +switch (pll) { +case PASS_PLL: +ret = external_clk[pa_clk]; +reg = KS2_PASSPLLCTL0; +break; +case DDR3_PLL: +ret = external_clk[ddr3_clk]; +reg = KS2_DDR3APLLCTL0; +break; +default: +return 0; +} + +tmp = __raw_readl(reg); + Please remove this line as below is part of this and should be in a block IMO. With this change, Acked-by: Murali Karicheri m-kariche...@ti.com Murali, This patch is already applied. I will remove this line in separate patch. Thanks. + if (!(tmp PLLCTL_BYPASS)) { +/* Bypass disabled */ +prediv = (tmp PLL_DIV_MASK) + 1; +mult = ((tmp PLL_MULT_SHIFT) PLL_MULT_MASK) + 1; +output_div = ((tmp PLL_CLKOD_SHIFT) + PLL_CLKOD_MASK) + 1; +ret = ((ret / prediv) * mult) / output_div; +} +} + +return ret; +} + +unsigned long clk_get_rate(unsigned int clk) +{ +switch (clk) { +case core_pll_clk: return pll_freq_get(CORE_PLL); +case pass_pll_clk: return pll_freq_get(PASS_PLL); +case ddr3_pll_clk: return pll_freq_get(DDR3_PLL); +case sys_clk0_1_clk: +case sys_clk0_clk: return pll_freq_get(CORE_PLL) / pll0div_read(1); +case sys_clk1_clk: return pll_freq_get(CORE_PLL) / pll0div_read(2); +case sys_clk2_clk: return pll_freq_get(CORE_PLL) / pll0div_read(3); +case sys_clk3_clk: return pll_freq_get(CORE_PLL) / pll0div_read(4); +case sys_clk0_2_clk:return clk_get_rate(sys_clk0_clk) / 2; +case sys_clk0_3_clk:return clk_get_rate(sys_clk0_clk) / 3; +case sys_clk0_4_clk:return clk_get_rate(sys_clk0_clk) / 4; +case sys_clk0_6_clk:return clk_get_rate(sys_clk0_clk) / 6; +case sys_clk0_8_clk:return clk_get_rate(sys_clk0_clk) / 8; +case sys_clk0_12_clk: return clk_get_rate(sys_clk0_clk) / 12; +case sys_clk0_24_clk: return clk_get_rate(sys_clk0_clk) / 24; +
[U-Boot] [U-boot] [Patch] ARM: keystone: ddr3: workaround for ddr3a/3b memory issue
From: Murali Karicheri m-kariche...@ti.com This patch implements a workaround to fix DDR3 memory issue. The code for workaround detects PGSR0 errors and then preps for and executes a software-controlled hard reset.In board_early_init, where logic has been added to identify whether or not the previous reset was a PORz. PLL initialization is skipped in the case of a software-controlled hard reset. Signed-off-by: Murali Karicheri m-kariche...@ti.com Signed-off-by: Keegan Garcia kgar...@ti.com Signed-off-by: Ivan Khoronzhuk ivan.khoronz...@ti.com --- Based on [U-boot] [Patch 0/6] keystone2: add k2l SoC and k2l_evm board support series http://www.mail-archive.com/u-boot@lists.denx.de/msg146472.html arch/arm/cpu/armv7/keystone/ddr3.c| 73 +++ arch/arm/include/asm/arch-keystone/ddr3.h | 1 + arch/arm/include/asm/arch-keystone/hardware.h | 2 + board/ti/ks2_evm/ddr3_k2hk.c | 4 ++ 4 files changed, 80 insertions(+) diff --git a/arch/arm/cpu/armv7/keystone/ddr3.c b/arch/arm/cpu/armv7/keystone/ddr3.c index 2391e79..8cb9279 100644 --- a/arch/arm/cpu/armv7/keystone/ddr3.c +++ b/arch/arm/cpu/armv7/keystone/ddr3.c @@ -10,6 +10,7 @@ #include asm/io.h #include common.h #include asm/arch/ddr3.h +#include asm/arch/psc_defs.h void ddr3_init_ddrphy(u32 base, struct ddr3_phy_config *phy_cfg) { @@ -86,3 +87,75 @@ void ddr3_reset_ddrphy(void) tmp = ~KS2_DDR3_PLLCTRL_PHY_RESET; __raw_writel(tmp, KS2_DDR3APLLCTL1); } + +/** + * ddr3_reset_workaround - reset workaround in case if leveling error + * detected for PG 1.0 and 1.1 k2hk SoCs + */ +void ddr3_err_reset_workaround(void) +{ + unsigned int tmp; + unsigned int tmp_a; + unsigned int tmp_b; + + /* +* Check for PGSR0 error bits of DDR3 PHY. +* Check for WLERR, QSGERR, WLAERR, +* RDERR, WDERR, REERR, WEERR error to see if they are set or not +*/ + tmp_a = __raw_readl(KS2_DDR3A_DDRPHYC + KS2_DDRPHY_PGSR0_OFFSET); + tmp_b = __raw_readl(KS2_DDR3B_DDRPHYC + KS2_DDRPHY_PGSR0_OFFSET); + + if (((tmp_a 0x0FE0) != 0) || ((tmp_b 0x0FE0) != 0)) { + printf(DDR Leveling Error Detected!\n); + printf(DDR3A PGSR0 = 0x%x\n, tmp_a); + printf(DDR3B PGSR0 = 0x%x\n, tmp_b); + + /* +* Write Keys to KICK registers to enable writes to registers +* in boot config space +*/ + __raw_writel(KS2_KICK0_MAGIC, KS2_KICK0); + __raw_writel(KS2_KICK1_MAGIC, KS2_KICK1); + + /* +* Move DDR3A Module out of reset isolation by setting +* MDCTL23[12] = 0 +*/ + tmp_a = __raw_readl(KS2_PSC_BASE + + PSC_REG_MDCTL(KS2_LPSC_EMIF4F_DDR3A)); + + tmp_a = PSC_REG_MDCTL_SET_RESET_ISO(tmp_a, 0); + __raw_writel(tmp_a, KS2_PSC_BASE + +PSC_REG_MDCTL(KS2_LPSC_EMIF4F_DDR3A)); + + /* +* Move DDR3B Module out of reset isolation by setting +* MDCTL24[12] = 0 +*/ + tmp_b = __raw_readl(KS2_PSC_BASE + + PSC_REG_MDCTL(KS2_LPSC_EMIF4F_DDR3B)); + tmp_b = PSC_REG_MDCTL_SET_RESET_ISO(tmp_b, 0); + __raw_writel(tmp_b, KS2_PSC_BASE + +PSC_REG_MDCTL(KS2_LPSC_EMIF4F_DDR3B)); + + /* +* Write 0x5A69 Key to RSTCTRL[15:0] to unlock writes +* to RSTCTRL and RSTCFG +*/ + tmp = __raw_readl(KS2_RSTCTRL); + tmp = KS2_RSTCTRL_MASK; + tmp |= KS2_RSTCTRL_KEY; + __raw_writel(tmp, KS2_RSTCTRL); + + /* +* Set PLL Controller to drive hard reset on SW trigger by +* setting RSTCFG[13] = 0 +*/ + tmp = __raw_readl(KS2_RSTCTRL_RSCFG); + tmp = ~KS2_RSTYPE_PLL_SOFT; + __raw_writel(tmp, KS2_RSTCTRL_RSCFG); + + reset_cpu(0); + } +} diff --git a/arch/arm/include/asm/arch-keystone/ddr3.h b/arch/arm/include/asm/arch-keystone/ddr3.h index 4d229a2..6bf35d3 100644 --- a/arch/arm/include/asm/arch-keystone/ddr3.h +++ b/arch/arm/include/asm/arch-keystone/ddr3.h @@ -50,6 +50,7 @@ struct ddr3_emif_config { void ddr3_init(void); void ddr3_reset_ddrphy(void); +void ddr3_err_reset_workaround(void); void ddr3_init_ddrphy(u32 base, struct ddr3_phy_config *phy_cfg); void ddr3_init_ddremif(u32 base, struct ddr3_emif_config *emif_cfg); diff --git a/arch/arm/include/asm/arch-keystone/hardware.h b/arch/arm/include/asm/arch-keystone/hardware.h index 2eec4e7..29f7bf1 100644 --- a/arch/arm/include/asm/arch-keystone/hardware.h +++ b/arch/arm/include/asm/arch-keystone/hardware.h @@ -121,9 +121,11 @@ typedef volatile unsigned int
Re: [U-Boot] [PATCH v4] arm: tegra: initial support for apalis t30
Hi Marcel, 2014-09-02 19:57 GMT+09:00 Marcel Ziswiler mar...@ziswiler.com: diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index dd987cc..e5d31f9 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -701,6 +701,9 @@ config TARGET_WHISTLER config TARGET_COLIBRI_T20_IRIS bool Support colibri_t20_iris +config TARGET_APALIS_T30 + bool Support Apalis T30 + config TARGET_COLIBRI_T30 bool Support Colibri T30 I am afraid this patch is no longer applicable to the mainline since commit ddd960e6c4b8412fa5c5a35f36cc3ac9f3ffbc16 (tegra: kconfig: move board select menu and common settings). I am sorry about this, but could you rebase your patch please? Tom Warren, Could you have u-boot-tegra/master to be fast-forwarded to u-boot/master to avoid a lator conflict ? -- Best Regards Masahiro Yamada ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH] buildman: fix typos of --dry-run help message
try run= dry run no nothing = do nothing/ ... = '...' The last one is for consistency with the other option helps. Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com --- tools/buildman/buildman.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/buildman/buildman.py b/tools/buildman/buildman.py index e18859b..f01e14c 100755 --- a/tools/buildman/buildman.py +++ b/tools/buildman/buildman.py @@ -97,7 +97,7 @@ parser.add_option('-k', '--keep-outputs', action='store_true', parser.add_option('--list-tool-chains', action='store_true', default=False, help='List available tool chains') parser.add_option('-n', '--dry-run', action='store_true', dest='dry_run', - default=False, help=Do a try run (describe actions, but no nothing)) + default=False, help='Do a dry run (describe actions, but do nothing)') parser.add_option('-o', '--output-dir', type='string', dest='output_dir', default='..', help='Directory where all builds happen and buildman has its workspace (default is ../)') -- 1.9.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH] buildman: fix typos of --dry-run help message
On 4 September 2014 10:19, Masahiro Yamada yamad...@jp.panasonic.com wrote: try run= dry run no nothing = do nothing/ ... = '...' The last one is for consistency with the other option helps. Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com Acked-by: Simon Glass s...@chromium.org ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH 0/2] A little improvement of Kbuild script and Makefile cleanup
1/2 imports a build script update from Linux. 2/2 refactors examples/standalone/Makefile based on 1/2. Masahiro Yamada (2): scripts/Makefile.clean: clean also $(extra-m) and $(extra-) kbuild: standalone: simplify clean-files examples/standalone/Makefile | 2 +- scripts/Makefile.clean | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) -- 1.9.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH 1/2] scripts/Makefile.clean: clean also $(extra-m) and $(extra-)
This commit is a backport from Linux Kernel, commit 9d5db8949f1ecf4019785b04d8986835d3c0e99e, written by me. Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com --- This patch was well-reviewed on Linux Kbuild ML and is already in the Linux mainline. It is surely safe. scripts/Makefile.clean | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean index d6dcd47..88f14e2 100644 --- a/scripts/Makefile.clean +++ b/scripts/Makefile.clean @@ -45,8 +45,8 @@ subdir-ymn:= $(foreach f, $(subdir-ymn), \ # build a list of files to remove, usually relative to the current # directory -__clean-files := $(extra-y) $(always) \ - $(targets) $(clean-files) \ +__clean-files := $(extra-y) $(extra-m) $(extra-) \ + $(always) $(targets) $(clean-files) \ $(host-progs) \ $(hostprogs-y) $(hostprogs-m) $(hostprogs-) -- 1.9.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH 2/2] kbuild: standalone: simplify clean-files
Files added $(extra-) are removed by make clean. Besides, wildcard *.srec *.bin is simpler. Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com --- examples/standalone/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/standalone/Makefile b/examples/standalone/Makefile index 2dacba2..0863a8c 100644 --- a/examples/standalone/Makefile +++ b/examples/standalone/Makefile @@ -22,7 +22,7 @@ extra-$(CONFIG_PPC)+= sched ELF := $(strip $(extra-y)) extra-y += $(addsuffix .srec,$(extra-y)) $(addsuffix .bin,$(extra-y)) -clean-files := $(extra-) $(addsuffix .srec,$(extra-)) $(addsuffix .bin,$(extra-)) +clean-files := *.srec *.bin COBJS := $(ELF:=.o) -- 1.9.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] Kernel XIP
Dear U-boot team I'm currently working on an embedded system that uses U-boot as a second step bootloader. I'm testing the booting time of the kernel with binary formats. Before I was able to flash the first level bootloader, the u-boot and the kernel (uImage) into the nand flash of the embedded system with the following command on u-boot: bootcmd=nand read.jffs2 0x2200 0x20 0xB0; bootm 0x2200 - I would like to know if the bootm command is actually loading the complete kernel to RAM or if it is loading only the required pages from flash. - Also, please correct me if I'm wrong but from the description of the bootm command, it seemed to me as if the bootm command should be enough to actually start the kernel, nevertheless I encountered myself with needing to previously read the kernel from the flash, to later be able to boot it, why is that so? - I have also tried an xipImage for the kernel, nevertheless once I use this binary format, uboot promts an error: can't get kernel image! I checked the tutorial available at your website http://www.denx.de/wiki/bin/view/DULG/ConfigureLinuxForXIP, and I confirmed that my linux configuration creates an xipImage (not a uImage as stated in the tutorial). Does u-boot supports kernel execution in place? and if so, does it only loads the necesary pages or does it fully loads the kernel from the nand flash. Thanks for your attention Kind regards _ Camilo Andres Roca Duarte Communication and Media Engineering Student Hochschule Offenburg ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH] powerpc/mpc85xx: Serdes protocol 00 is supported
0x00 is a valid serdes protocol for QorIQ parts, and can not be used to test whether the serdes is enabled or disabled. Signed-off-by: Ebony Zhu b45...@freescale.com --- arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.c | 5 - 1 file changed, 5 deletions(-) diff --git a/arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.c b/arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.c index d1fc76a..8edf5bb 100644 --- a/arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.c +++ b/arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.c @@ -186,11 +186,6 @@ u64 serdes_init(u32 sd, u32 sd_addr, u32 sd_prctl_mask, u32 sd_prctl_shift) #endif cfg = in_be32(gur-rcwsr[4]) sd_prctl_mask; - /* Is serdes enabled at all? */ - if (!cfg) { - printf(SERDES%d is not enabled\n, sd + 1); - return 0; - } /* Erratum A-007186 * Freescale Scratch Pad Fuse Register n (SFP_FSPFR0) -- 1.8.3.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v2] buildman: fix typos of --dry-run help message
try run= dry run no nothing = do nothing ... = '...' The last one is for consistency with the other option helps. Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com Acked-by: Simon Glass s...@chromium.org --- Changes in v2: - Fix a typo in my git-log do nothing/ = do nothing tools/buildman/buildman.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/buildman/buildman.py b/tools/buildman/buildman.py index 1258b76..d08dcd7 100755 --- a/tools/buildman/buildman.py +++ b/tools/buildman/buildman.py @@ -99,7 +99,7 @@ parser.add_option('-l', '--list-error-boards', action='store_true', parser.add_option('--list-tool-chains', action='store_true', default=False, help='List available tool chains') parser.add_option('-n', '--dry-run', action='store_true', dest='dry_run', - default=False, help=Do a try run (describe actions, but no nothing)) + default=False, help='Do a dry run (describe actions, but do nothing)') parser.add_option('-o', '--output-dir', type='string', dest='output_dir', default='..', help='Directory where all builds happen and buildman has its workspace (default is ../)') -- 1.9.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] Kernel XIP
Dear Camilo Andres Roca Duarte, In message camdpjjuhad-uujjkm8mr6bb6vic64zzw7wopmzmnbe_qxcz...@mail.gmail.com you wrote: - I would like to know if the bootm command is actually loading the complete kernel to RAM or if it is loading only the required pages from flash. bootm has no knowledge about things like what a kernel is or what required pages might be, From the image header it gets only information about start address and size of a memory range, and this is what it will process. I guess this matches what you call complete kernel. But please be careful: when talking about the loading that takes place, then keep in mind that this is a copy to system memory, or a decompress and store to system memory, but in both cases the origin of the data is also somewhwere in the memory address range, i. e. in RAM, NOR flash or similar. Actually the 'm' in bootm means boot an image that is located somewhere in *M*emory. - Also, please correct me if I'm wrong but from the description of the bootm command, it seemed to me as if the bootm command should be enough to actually start the kernel, nevertheless I encountered myself with needing to previously read the kernel from the flash, to later be able to boot it, why is that so? With flash, you mean NAND flash. NAND flash is not memory, but a storage device. So you need other means to read the data from the storage device into memory. Only then you can use bootm. - I have also tried an xipImage for the kernel, nevertheless once I use this binary format, uboot promts an error: can't get kernel image! Using XIP requires a really detailed understand of all the steps of the boot process, both in U-Boot and in the kernel. I checked the tutorial available at your website http://www.denx.de/wiki/bin/view/DULG/ConfigureLinuxForXIP, and I Please have a look at the age of this page - the information there cannot be used directly on recent code; you will need to adjust it carefully. [And if you do and get it working, it would be magnificent if you could also update the wiki page so it is up to date again.] confirmed that my linux configuration creates an xipImage (not a uImage as stated in the tutorial). Does u-boot supports kernel execution in place? In principle it does, but you really have to kow exactly what you are doing. and if so, does it only loads the necesary pages or does it fully loads the kernel from the nand flash. You asked the same before - see above. 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: w...@denx.de You can do this in a number of ways. IBM chose to do all of them. Why do you find that funny?-- D. Taylor, Computer Science 350 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v2] patman: make run results better visible
For an occasional user of patman some failures are not obvious: for instance when checkpatch reports warnings, the dry run still reports that the email would be sent. If it is not dry run, the warnings are shown on the screen, but it is not clear that the email was not sent. Add some code to report failure to send email explicitly. Tested by running the script on a patch with style violations, observed error messages in the script output. Signed-off-by: Vadim Bendebury vben...@chromium.org --- Changes in v2: - modified the error message for accuracy tools/patman/patman.py | 7 ++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/patman/patman.py b/tools/patman/patman.py index c60aa5a..86e8e63 100755 --- a/tools/patman/patman.py +++ b/tools/patman/patman.py @@ -154,13 +154,18 @@ else: # Email the patches out (giving the user time to check / cancel) cmd = '' -if ok or options.ignore_errors: +its_a_go = ok or options.ignore_errors +if its_a_go: cmd = gitutil.EmailPatches(series, cover_fname, args, options.dry_run, not options.ignore_bad_tags, cc_file, in_reply_to=options.in_reply_to) +else: +print col.Color(col.RED, Not sending emails due to errors/warnings) # For a dry run, just show our actions as a sanity check if options.dry_run: series.ShowActions(args, cmd, options.process_tags) +if not its_a_go: +print col.Color(col.RED, Email would not be sent) os.remove(cc_file) -- 2.1.0.rc2.206.gedb03e5 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] Problem writing to Samsung E-Die NAND on OpenRD-like platform
Hi list, we have a custom legacy board based on OpenRD platform and using OpenRD config with slight changes (few GPIOs remapped, slower SDRAM timing and redundant environment). Now we had to change to Samsung E-Die NAND for a new assembly, and I can not write to the NAND any more. Switching to up-to-date U-Boot (git pull from yesterday's master branch) did not help, even though I set CONFIG_SYS_NAND_NO_SUBPAGE_WRITE which seems to be one of the problems. The errors result in ECC errors during read, and I can see that almost complete garbage is written in the flash. However, the errors are absolutely reproducible over multiple write and read attempts as well as old (some early 2010) and current U-Boot version. (I changed nand-chip_delay to 50 in our old u-boot tree to make it work at all.) I am out of ideas, so I try to ask here if anybody has an idea what might be the problem or where to start further investigation. All I could find yet are hints to the to-be-increased chip_delay and CONFIG_SYS_NAND_NO_SUBPAGE_WRITE which I both set at least for the new U-Boot version. Here's how I tested this: tftp 0x80 192.168.2.88:uImage nand erase clean 0x20 0x60 nand write.jffs2 0x80 0x20 ${filesize} nand read.jffs2 0xb0 0x20 0x30 Data written to flash: Marvell md.b 0x80 0x80 0080: 27 05 19 56 ec 84 36 50 54 07 3a d2 00 23 7d e8'..V..6PT.:..#}. 00800010: 00 00 80 00 00 00 80 00 83 23 fb 58 05 02 02 00.#.X 00800020: 4c 69 6e 75 78 2d 32 2e 36 2e 33 36 2d 73 76 6eLinux-2.6.36-svn 00800030: 33 34 38 30 32 00 00 00 00 00 00 00 00 00 00 0034802... 00800040: 00 00 a0 e1 00 00 a0 e1 00 00 a0 e1 00 00 a0 e1 00800050: 00 00 a0 e1 00 00 a0 e1 00 00 a0 e1 00 00 a0 e1 00800060: 02 00 00 ea 18 28 6f 01 00 00 00 00 e8 7d 23 00.(o..}#. 00800070: 01 70 a0 e1 02 80 a0 e1 00 20 0f e1 03 00 12 e3.p... .. Data read back from flash: Marvell md.b 0xb0 0x80 00b0: ff ff fd ff ff ff ff ff ff ff 3a d2 ff ff ff ff..:. 00b00010: 00 00 80 00 00 00 ff ff ff ff fb 58 ff ff ff ff...X 00b00020: 4c 69 6e 75 ff ff ff ff ff ff 33 36 ff ff 76 6eLinu..36..vn 00b00030: ff ff 38 30 ff ff ff ff ff ff ff ff 00 00 00 00..80 00b00040: ff ff ff ff ff ff ff ff ff ff a0 e1 ff ff ff ff 00b00050: 00 00 a0 e1 00 00 ff ff ff ff a0 e1 ff ff ff ff 00b00060: 02 00 00 ea ff ff ff ff ff ff 00 00 ff ff 23 00..#. 00b00070: ff ff a0 e1 ff ff ff ff ff ff ff ff 03 00 12 e3 I can not recognize an actual pattern here, although some portions seem regularly aligned. When writing the same image using openocd (also some prehistoric version dating back 2010.06), there are also errors, but only very few single bit errors: Marvell cmp.b 0x80 0xb0 0x237e28 byte at 0x008a923b (0x16) != byte at 0x00ba923b (0x12) Total of 692795 byte(s) were the same Marvellcmp.b 0x8b 0xbb 0x187e28 byte at 0x0093983f (0x2a) != byte at 0x00c3983f (0x28) Total of 563263 byte(s) were the same [...] Does all this sound familiar to anybody? Any help is greatly appreciated! Best regards, Wolfgang ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v9 0/14] Add some missing buildman features and deprecate MAKEALL
Hi Tom, On 31 August 2014 23:07, Simon Glass s...@chromium.org wrote: Hi Tom, On 28 August 2014 05:48, Tom Rini tr...@ti.com wrote: On Tue, Aug 26, 2014 at 08:54:03PM -0600, Simon Glass wrote: Hi Tom, On 25 August 2014 14:21, Tom Rini tr...@ti.com wrote: On Mon, Aug 25, 2014 at 01:00:05PM -0600, Simon Glass wrote: Hi Tom, On 25 August 2014 12:54, Tom Rini tr...@ti.com wrote: On Mon, Aug 25, 2014 at 09:58:21AM -0600, Simon Glass wrote: Buildman has been around for a little over a year and is used by a fair number of U-Boot developers. However quite a few people still use MAKEALL. Buildman was intended to replace MAKEALL, so perhaps now is a good time to start that process. The reasons to deprecate MAKEALL are: - We don't want to maintain two build systems - Buildman is typically faster - Buildman has a lot more features This series adds a few features to buildman to fill some gaps, adds some information into the README on how to migrate from MAKEALL, and adds a deprecation message to MAKEALL. I'm testing this out again in the Ubuntu 10.04 / LSF environment I have access to but so far I'm still finding that test for --no-decorate isn't working and I have to manually set it to False. Oh dear. I wrote a test for this in the second series. So if you apply that series, do the tests pass? It is in func_test.py and is called testGitSetup(). With my local kludge removed yes, all tests pass. It's quite mysterious. I installed Ubuntu 10.04 and it runs python 2.6.5. The --no-decorate patch does work, although it does print an error. I could suppress that easily enough, just adding another arg 'capture_stderr=True' to the RunPipe() call in gitutil.py.Setup(). I see a problem with timedelta not having total_seconds. After that the threading dies. So I'm quite impressed you can get buildman to run at all. Are you using one of the later 10.04 releases? *shakes fist at corporate IT* The box I use to launch jobs is Ubuntu 10.04.4. The boxes the jobs run on are actually Ubuntu 12.04.1 (I had assumed it was all the same for some reason. They also have git 1.7.9.5. Well they obviously can't make it *too* easy. So where does this leave us in trying to figure this out? It feels like we should probably get the current patches in and see where this leaves us. I'll work on a pull request, unless you think we should wait. Regards, Simon ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v2 3/5] iMX6DL:arm2: Add support for i.MX6DL arm2 DDR3 board
Hello Ye, On Thu, Sep 4, 2014 at 11:17 AM, Ye.Li b37...@freescale.com wrote: This patch adds the i.MX6DL arm2 board support. The i.MX6DL ARM2 shared the same board with i.MX6Q ARM2 board since the i.MX6DL is pin-pin compatible with i.MX6Q. The patch also support the DDR 32-BIT mode option. Please define CONFIG_DDR_32BIT in the board configure file to enable DDR 32-BIT mode.But due to the board design, it's 64bit DDR buswidth physically, so, if you CONFIG_DDR_32BIT, the DDR memory size will be half of it. Signed-off-by: Ye.Li b37...@freescale.com Your patch short log could be improved for: imx: mx6dlarm2: Add support for i.MX6DL arm2 DDR3 board This could be reworked on the other patches as well. My 2c. -- Otavio Salvador O.S. Systems http://www.ossystems.com.brhttp://code.ossystems.com.br Mobile: +55 (53) 9981-7854Mobile: +1 (347) 903-9750 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v2] patman: make run results better visible
Vadim, On Thu, Sep 4, 2014 at 10:45 AM, Vadim Bendebury vben...@chromium.org wrote: For an occasional user of patman some failures are not obvious: for instance when checkpatch reports warnings, the dry run still reports that the email would be sent. If it is not dry run, the warnings are shown on the screen, but it is not clear that the email was not sent. Add some code to report failure to send email explicitly. Tested by running the script on a patch with style violations, observed error messages in the script output. Signed-off-by: Vadim Bendebury vben...@chromium.org --- Changes in v2: - modified the error message for accuracy tools/patman/patman.py | 7 ++- 1 file changed, 6 insertions(+), 1 deletion(-) Reviewed-by: Doug Anderson diand...@chromium.org ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] SPL broken on i.mx31 platforms
Hi On 3 September 2014 03:13, Tom Rini tr...@ti.com wrote: On Wed, Sep 03, 2014 at 02:53:17AM +0200, Benoît Thébaudeau wrote: IMHO, the 'b reset' and the 'nop nop nop' are two different issues, so Helmut should create a formal patch for the 'b reset' issue right now, which will fix mx31pdk (and maybe other boards) for the release. Then, once the 'nop nop nop' issue has been resolved for TT-01 (cache issue or something else), another formal patch should be created for this issue, unless it is purely out of tree. v2014.10 is getting closer with the release of -rc2. It would be much better to get mx31pdk fixed for this release. Helmut, can you send a patch for the 'b reset' issue? If not, do you agree that someone else (maybe the board maintainer: Magnus?) sends it with a 'Reported-by: Helmut Raiger helmut.rai...@hale.at'? Yes, please, I'd like to see this fixed for the release proper. I'll try to test and submit a match in a couple of days. Regards, Magnus ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] SPL broken on i.mx31 platforms
Hi Magnus, On Thu, Sep 4, 2014 at 9:12 PM, Magnus Lilja lilja.mag...@gmail.com wrote: On 3 September 2014 03:13, Tom Rini tr...@ti.com wrote: On Wed, Sep 03, 2014 at 02:53:17AM +0200, Benoît Thébaudeau wrote: IMHO, the 'b reset' and the 'nop nop nop' are two different issues, so Helmut should create a formal patch for the 'b reset' issue right now, which will fix mx31pdk (and maybe other boards) for the release. Then, once the 'nop nop nop' issue has been resolved for TT-01 (cache issue or something else), another formal patch should be created for this issue, unless it is purely out of tree. v2014.10 is getting closer with the release of -rc2. It would be much better to get mx31pdk fixed for this release. Helmut, can you send a patch for the 'b reset' issue? If not, do you agree that someone else (maybe the board maintainer: Magnus?) sends it with a 'Reported-by: Helmut Raiger helmut.rai...@hale.at'? Yes, please, I'd like to see this fixed for the release proper. I'll try to test and submit a match in a couple of days. I have already submitted a patch for that yesterday. It's 'arm: Make reset position-independent', and you were in Cc. So you just have to test and to add your 'Tested-by'. Thanks in advance. Best regards, Benoît ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] SPL broken on i.mx31 platforms
Hi On 4 September 2014 21:50, Benoît Thébaudeau benoit.thebaudeau@gmail.com wrote: Hi Magnus, v2014.10 is getting closer with the release of -rc2. It would be much better to get mx31pdk fixed for this release. Helmut, can you send a patch for the 'b reset' issue? If not, do you agree that someone else (maybe the board maintainer: Magnus?) sends it with a 'Reported-by: Helmut Raiger helmut.rai...@hale.at'? Yes, please, I'd like to see this fixed for the release proper. I'll try to test and submit a match in a couple of days. I have already submitted a patch for that yesterday. It's 'arm: Make reset position-independent', and you were in Cc. So you just have to test and to add your 'Tested-by'. Ah, missed that. Excellent, I'll test that within a day or two then! Regards, Magnus ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3 0/4] introduce get_maintainer.pl
Hi Simon, 2014-09-04 1:34 GMT+02:00 Simon Glass s...@chromium.org: Hi Daniel, On 31 July 2014 18:24, Daniel Schwierzeck daniel.schwierz...@gmail.com wrote: This series imports get_maintainer.pl from kernel and reintroduce the MAINTAINERS file in the according format. Currently one have to manually grep all infos about board maintainers or custodians from various sources like git log, wiki or boards.cfg. get_maintainer.pl makes this task much easier. Also patman is already able to use it for cc-cmd. The MAINTAINERS file contains all custodians and is hand-written based on infos from wiki [1] and u-boot git forks [2]. Thus the source files infos (F:) are not complete yet. Furthermore status (S:) and maintainership (M:) for some custodian trees are probably wrong. Any help in completing and fixing that is appreciated. The get_maintainers.pl script is modified to scan multiple MAINTAINERS files in the board directory. This is required with the switch to Kconfig which adds a MAINTAINERS file per board. Examples: $ ./scripts/get_maintainer.pl --nogit-fallback -f board/sandbox/ Simon Glass s...@chromium.org (maintainer:SANDBOX BOARD) u-boot@lists.denx.de (open list) $ ./scripts/get_maintainer.pl --nogit-fallback -f arch/sandbox/ Simon Glass s...@chromium.org (maintainer:SANDBOX) u-boot@lists.denx.de (open list) $ ./scripts/get_maintainer.pl --nogit-fallback -f board/sandburst/metrobox/ Travis Sawyer travis.saw...@sandburst.com (orphan (since 2014-03):METROBOX BOARD) u-boot@lists.denx.de (open list) This series is also available at git://git.denx.de/u-boot-mips.git/maintainers_v3. Patman now picks this up which is great. But it does sometimes produce a long list of maintainers. I wonder if we could have an option to turn it off (perhaps -m)? Regards, Simon I think we should generally adapt the options for get_maintainers.pl patman uses to not include all committers by default. Either we could completely disable git (--nogit-fallback). Or we could increase the minimum percentage of commits required (--git-min-percent 10). -- - Daniel ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] ARM: DRA72: DDR3: Add emif settings for 666MHz clock
On Thu, Aug 28, 2014 at 12:01:04PM +0530, Lokesh Vutla wrote: From: R Sricharan r.sricha...@ti.com On DRA72x, EMIF supports DDR3 upto 667MHz. Adding the required settings for DDR3 at 666MHz and enabling it. Signed-off-by: R Sricharan r.sricha...@ti.com Signed-off-by: Lokesh Vutla lokeshvu...@ti.com Applied to u-boot/master, thanks! -- Tom signature.asc Description: Digital signature ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [U-Boot, U-boot] ARM: keystone: clock: use correct BWADJ field mask for PASSPLLCTL0
On Mon, Aug 11, 2014 at 11:59:42AM +0300, Khoronzhuk, Ivan wrote: The mask for BWADJ field of PASSPLLCTL0 register has to be 0xff, but by mistake, here is used shift instead of mask, so correct it. Signed-off-by: Ivan Khoronzhuk ivan.khoronz...@ti.com Applied to u-boot/master, thanks! -- Tom signature.asc Description: Digital signature ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] omap3_beagle: Add boot script support to omap3 beagle board
On Tue, Aug 26, 2014 at 10:48:13AM +0200, Guillaume GARDET wrote: This patch adds boot script support to omap3 beagle board. Signed-off-by: Guillaume GARDET guillaume.gar...@free.fr Cc: Tom Rini tr...@ti.com Applied to u-boot/master, thanks! -- Tom signature.asc Description: Digital signature ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [U-Boot, U-boot] keystone2: use readl/writel functions instead of redefinition
On Thu, Aug 28, 2014 at 04:07:45PM +0300, Khoronzhuk, Ivan wrote: There is no reason to redefine pure readl/writel functions. So remove this redundancy. Signed-off-by: Ivan Khoronzhuk ivan.khoronz...@ti.com Acked-by: Vitaly Andrianov vita...@ti.com Applied to u-boot/master, thanks! -- Tom signature.asc Description: Digital signature ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] arm: am335x: add Kconfig range attribute to prevent invalid CONS_INDEX
On Mon, Sep 01, 2014 at 01:05:32AM +0900, Masahiro Yamada wrote: The help message in board/ti/am335x/Kconfig says AM335x has 6 UARTs, so the valid number for CONFIG_CONS_INDEX is from 1 to 6. Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com Cc: Tom Rini tr...@ti.com Applied to u-boot/master, thanks! -- Tom signature.asc Description: Digital signature ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [U-Boot, U-boot] mtd: nand: davinci_nand: correct keystone RBL layout definition
On Tue, Sep 02, 2014 at 12:20:02AM +0300, Khoronzhuk, Ivan wrote: In case when 4K page keystone RBL layout is used the compilation error is appeared. That's because the #ifdef has to be placed under struct name. This patch correct it. Signed-off-by: Ivan Khoronzhuk ivan.khoronz...@ti.com Applied to u-boot/master, thanks! -- Tom signature.asc Description: Digital signature ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] mtd: nand: omap_gpmc: Enable multiple NAND flash devices
On Tue, Sep 02, 2014 at 04:23:58PM +0200, Rostislav Lisovy wrote: Since the CS of a device connected to the GPMC was stored in the global variable, it was not possible to use multiple devices. In this patch the CS is stored per device in its 'struct omap_nand_info'. This makes it possible to use up to 'GPMC_MAX_CS' NAND Flash devices connected to U-boot. Signed-off-by: Rostislav Lisovy lis...@merica.cz Applied to u-boot/master, thanks! -- Tom signature.asc Description: Digital signature ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] AM335x: igep0033: Convert to generic board and use ti_am335x_common.h.
On Wed, Sep 03, 2014 at 05:59:57PM +0200, Enric Balletbò i Serra wrote: From: Enric Balletbo i Serra eballe...@iseebcn.com To reduce code duplication update am335x_igep0033.h to use ti_am335x_common.h and convert to generic board. Signed-off-by: Enric Balletbo i Serra eballe...@iseebcn.com Applied to u-boot/master, thanks! -- Tom signature.asc Description: Digital signature ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] mtd: nand: omap_gpmc: Fix 'bit-flip' errors
On Tue, Sep 02, 2014 at 05:00:30PM +0200, Rostislav Lisovy wrote: OMAP GPMC driver used with some NAND Flash devices (e.g. Spansion S34ML08G1) causes that U-boot shows hundreds of 'nand: bit-flip corrected' error messages. Possible cause was discussed in the mailinglist thread: http://lists.denx.de/pipermail/u-boot/2014-April/177508.html Quote (Author: Pekon Gupta pe...@ti.com): The issue is mainly due to a NAND protocol violation in the omap driver since the Random Data Output command (05h-E0h) expects to see only the column address that should be addressed within the already loaded read page into the read buffer. Only 2 address cycles with ALE active should be provided between the 05h and E0h commands. The Page read command expects the full address footprint (2bytes for column address + 3bytes for row address), but once the page is loaded into the read buffer, Random Data Output should be used with only 2bytes for column address. This patch combines the solution proposed in the mailinglist and the patch provided by the Spansion company (GPLv2 code, source: http://www.spansion.com/Support/Software/u-boot-psp-04.04.00.01-NAND.zip) Signed-off-by: Rostislav Lisovy lis...@merica.cz Applied to u-boot/master, thanks! -- Tom signature.asc Description: Digital signature ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] Please pull u-boot-ti/master
Hey, The following changes since commit d6c1ffc7d23f4fe4ae8c91101861055b8e1501b6: Prepare v2014.10-rc2 (2014-09-02 16:58:29 -0400) are available in the git repository at: git://git.denx.de/u-boot-ti.git master for you to fetch changes up to 681f785f7cc616a70aaa0c93a25300b0820f6968: ARM: DRA72: DDR3: Add emif settings for 666MHz clock (2014-09-04 13:12:49 -0400) Enric Balletbo i Serra (1): AM335x: igep0033: Convert to generic board and use ti_am335x_common.h. Guillaume GARDET (1): omap3_beagle: Add boot script support to omap3 beagle board Khoronzhuk, Ivan (3): ARM: keystone: clock: use correct BWADJ field mask for PASSPLLCTL0 keystone2: use readl/writel functions instead of redefinition mtd: nand: davinci_nand: correct keystone RBL layout definition Masahiro Yamada (1): arm: am335x: add Kconfig range attribute to prevent invalid CONS_INDEX R Sricharan (1): ARM: DRA72: DDR3: Add emif settings for 666MHz clock Rostislav Lisovy (2): mtd: nand: omap_gpmc: Enable multiple NAND flash devices mtd: nand: omap_gpmc: Fix 'bit-flip' errors arch/arm/cpu/armv7/keystone/clock.c|2 +- arch/arm/cpu/armv7/keystone/psc.c | 44 ++--- arch/arm/cpu/armv7/omap5/hw_data.c | 39 - arch/arm/cpu/armv7/omap5/sdram.c | 60 ++- arch/arm/include/asm/arch-keystone/emac_defs.h |7 +- board/ti/am335x/Kconfig|1 + drivers/mtd/nand/davinci_nand.c|2 +- drivers/mtd/nand/omap_gpmc.c | 46 +++-- drivers/net/keystone_net.c | 35 ++-- include/configs/am335x_igep0033.h | 221 +--- include/configs/omap3_beagle.h | 13 +- 11 files changed, 210 insertions(+), 260 deletions(-) -- Tom signature.asc Description: Digital signature ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3 0/4] introduce get_maintainer.pl
Hi Daniel, On 4 September 2014 14:45, Daniel Schwierzeck daniel.schwierz...@gmail.com wrote: Hi Simon, 2014-09-04 1:34 GMT+02:00 Simon Glass s...@chromium.org: Hi Daniel, On 31 July 2014 18:24, Daniel Schwierzeck daniel.schwierz...@gmail.com wrote: This series imports get_maintainer.pl from kernel and reintroduce the MAINTAINERS file in the according format. Currently one have to manually grep all infos about board maintainers or custodians from various sources like git log, wiki or boards.cfg. get_maintainer.pl makes this task much easier. Also patman is already able to use it for cc-cmd. The MAINTAINERS file contains all custodians and is hand-written based on infos from wiki [1] and u-boot git forks [2]. Thus the source files infos (F:) are not complete yet. Furthermore status (S:) and maintainership (M:) for some custodian trees are probably wrong. Any help in completing and fixing that is appreciated. The get_maintainers.pl script is modified to scan multiple MAINTAINERS files in the board directory. This is required with the switch to Kconfig which adds a MAINTAINERS file per board. Examples: $ ./scripts/get_maintainer.pl --nogit-fallback -f board/sandbox/ Simon Glass s...@chromium.org (maintainer:SANDBOX BOARD) u-boot@lists.denx.de (open list) $ ./scripts/get_maintainer.pl --nogit-fallback -f arch/sandbox/ Simon Glass s...@chromium.org (maintainer:SANDBOX) u-boot@lists.denx.de (open list) $ ./scripts/get_maintainer.pl --nogit-fallback -f board/sandburst/metrobox/ Travis Sawyer travis.saw...@sandburst.com (orphan (since 2014-03):METROBOX BOARD) u-boot@lists.denx.de (open list) This series is also available at git:// git.denx.de/u-boot-mips.git/maintainers_v3. Patman now picks this up which is great. But it does sometimes produce a long list of maintainers. I wonder if we could have an option to turn it off (perhaps -m)? Regards, Simon I think we should generally adapt the options for get_maintainers.pl patman uses to not include all committers by default. Either we could completely disable git (--nogit-fallback). Or we could increase the minimum percentage of commits required (--git-min-percent 10). OK, so long as there is a way to also make get_maintainers.pl a nop, then that is fine with me. Regards, Simon ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v5 0/14] Introduce driver model serial uclass
This series adds support for a serial uclass, enabling serial drivers to be converted to use driver model. With v4, exynos boards all build and a second attempt has been made to add Tegra support via the ns16550 driver, tested on beaver, Jetson-TK1 and seaboard (i.e. 3 of the 4 SoCs in mainline). To see the current state of driver model, look at u-boot-dm.git branch 'working'. This branch is at 'serial-working'. Changes in v5: - Add new patch to add a function to look up a chosen node - Add struct udevice declaration - Use /chosen/stdout-path instead of /aliases/console to specify the console Changes in v4: - Add a binding for sandbox serial - Add a separate Tegra serial driver to deal with the clock issue - Add new CONFIG_TEGRA_SERIAL option to enable dm driver - Remove 'clock-frequency' property from serial nodes - Remove clock frequency setup for ns16550 driver - Remove pre-reloc fdt property - Use hard-coded UART clock from Tegra configuration Changes in v3: - Add new change to enhance lists_bind_fdt() - Add new patch for tegra serial port details - Add new patch to collect common baud rate code in ns16550 - Add new patch to enable driver model for serial on tegra - Add new patch to move baud rate calculation to ns16550.c - Add new patch to support driver model in ns16550 - Add new patch to use V_NS16550_CLK only in SPL builds - Automatically bind the console even if not marked for pre-relocation - Avoid reordering functions - Change pre-reloc fdt property to 'u-boot,dm-pre-reloc' - Fix typo in commit message Changes in v2: - Rename struct device to struct udevice Simon Glass (14): serial: Set up the 'priv' pointer when creating a serial device dm: fdt: Add a function to look up a chosen node dm: Adjust lists_bind_fdt() to return the bound device dm: Add a uclass for serial devices sandbox: Convert serial driver to use driver model sandbox: serial: Support a coloured console sandbox: dts: Add a serial console node dm: exynos: Mark exynos5 console as pre-reloc dm: exynos: Move serial to driver model dm: serial: Move baud rate calculation to ns16550.c dm: serial: Collect common baud rate code in ns16550 dm: serial: Add driver model support for ns16550 tegra: dts: Add serial port details dm: tegra: Enable driver model for serial arch/arm/dts/exynos5.dtsi | 1 + arch/arm/dts/tegra114-dalmore.dts | 4 + arch/arm/dts/tegra114.dtsi | 53 arch/arm/dts/tegra124-jetson-tk1.dts | 4 + arch/arm/dts/tegra124-venice2.dts | 4 + arch/arm/dts/tegra124.dtsi | 66 arch/arm/dts/tegra20-colibri_t20_iris.dts | 4 + arch/arm/dts/tegra20-harmony.dts | 4 + arch/arm/dts/tegra20-medcom-wide.dts | 4 + arch/arm/dts/tegra20-paz00.dts | 4 + arch/arm/dts/tegra20-plutux.dts| 4 + arch/arm/dts/tegra20-seaboard.dts | 4 + arch/arm/dts/tegra20-tec.dts | 4 + arch/arm/dts/tegra20-trimslice.dts | 4 + arch/arm/dts/tegra20-ventana.dts | 4 + arch/arm/dts/tegra20-whistler.dts | 4 + arch/arm/dts/tegra20.dtsi | 51 ++- arch/arm/dts/tegra30-beaver.dts| 4 + arch/arm/dts/tegra30-cardhu.dts| 4 + arch/arm/dts/tegra30-tamonten.dtsi | 4 + arch/arm/dts/tegra30.dtsi | 66 arch/sandbox/dts/sandbox.dts | 10 + doc/device-tree-bindings/serial/ns16550.txt| 10 + doc/device-tree-bindings/serial/sandbox-serial.txt | 13 + drivers/core/lists.c | 10 +- drivers/core/root.c| 2 +- drivers/serial/Makefile| 7 +- drivers/serial/ns16550.c | 203 ++-- drivers/serial/sandbox.c | 140 +++-- drivers/serial/serial-uclass.c | 214 + drivers/serial/serial.c| 1 + drivers/serial/serial_ns16550.c| 14 +- drivers/serial/serial_s5p.c| 255 +-- drivers/serial/serial_tegra.c | 38 +++ include/configs/exynos-common.h| 1 + include/configs/sandbox.h | 3 + include/configs/tegra-common.h | 9 +- include/dm/lists.h | 6 +- include/dm/uclass-id.h | 1 + include/dt-bindings/clock/tegra114-car.h | 342 + include/dt-bindings/clock/tegra124-car.h | 342 + include/dt-bindings/clock/tegra20-car.h| 158 ++ include/dt-bindings/clock/tegra30-car.h| 273
[U-Boot] [PATCH v5 01/14] serial: Set up the 'priv' pointer when creating a serial device
The stdio_dev structure has a private pointer for its creator, but it is not set up by the serial system. Set it to point to the serial device so that it can be found by code called by stdio. Signed-off-by: Simon Glass s...@chromium.org --- Changes in v5: None Changes in v4: None Changes in v3: - Fix typo in commit message Changes in v2: None drivers/serial/serial.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c index d2eb752..bbe60af 100644 --- a/drivers/serial/serial.c +++ b/drivers/serial/serial.c @@ -320,6 +320,7 @@ void serial_stdio_init(void) dev.puts = serial_stub_puts; dev.getc = serial_stub_getc; dev.tstc = serial_stub_tstc; + dev.priv = s; stdio_register(dev); -- 2.1.0.rc2.206.gedb03e5 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v5 02/14] dm: fdt: Add a function to look up a chosen node
Within /chosen we may have a node which points to another node, similar to how /aliases works. Add a helper function to do this lookup. Signed-off-by: Simon Glass s...@chromium.org --- Changes in v5: - Add new patch to add a function to look up a chosen node Changes in v4: None Changes in v3: None Changes in v2: None include/fdtdec.h | 12 lib/fdtdec.c | 15 +++ 2 files changed, 27 insertions(+) diff --git a/include/fdtdec.h b/include/fdtdec.h index 5f88938..2590d30 100644 --- a/include/fdtdec.h +++ b/include/fdtdec.h @@ -376,6 +376,18 @@ int fdtdec_get_alias_seq(const void *blob, const char *base, int node, */ int fdtdec_get_alias_node(const void *blob, const char *name); +/** + * Get the offset of the given chosen node + * + * This looks up a property in /chosen containing the path to another node, + * then finds the offset of that node. + * + * @param blob Device tree blob (if NULL, then error is returned) + * @param name Property name, e.g. stdout-path + * @return Node offset referred to by that chosen node, or -ve FDT_ERR_... + */ +int fdtdec_get_chosen_node(const void *blob, const char *name); + /* * Get the name for a compatible ID * diff --git a/lib/fdtdec.c b/lib/fdtdec.c index c2f3645..06d4542 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -382,6 +382,21 @@ int fdtdec_get_alias_node(const void *blob, const char *name) return fdt_path_offset(blob, prop); } +int fdtdec_get_chosen_node(const void *blob, const char *name) +{ + const char *prop; + int chosen_node; + int len; + + if (!blob) + return -FDT_ERR_NOTFOUND; + chosen_node = fdt_path_offset(blob, /chosen); + prop = fdt_getprop(blob, chosen_node, name, len); + if (!prop) + return -FDT_ERR_NOTFOUND; + return fdt_path_offset(blob, prop); +} + int fdtdec_check_fdt(void) { /* -- 2.1.0.rc2.206.gedb03e5 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v5 09/14] dm: exynos: Move serial to driver model
Change the Exynos serial driver to work with driver model and switch over all Exynos5 boards to use it. Signed-off-by: Simon Glass s...@chromium.org --- Changes in v5: None Changes in v4: None Changes in v3: - Avoid reordering functions Changes in v2: None drivers/serial/serial_s5p.c | 255 include/configs/exynos-common.h | 1 + 2 files changed, 73 insertions(+), 183 deletions(-) diff --git a/drivers/serial/serial_s5p.c b/drivers/serial/serial_s5p.c index 98c62b4..8469afd 100644 --- a/drivers/serial/serial_s5p.c +++ b/drivers/serial/serial_s5p.c @@ -9,6 +9,8 @@ */ #include common.h +#include dm.h +#include errno.h #include fdtdec.h #include linux/compiler.h #include asm/io.h @@ -18,26 +20,18 @@ DECLARE_GLOBAL_DATA_PTR; -#define RX_FIFO_COUNT_MASK 0xff -#define RX_FIFO_FULL_MASK (1 8) -#define TX_FIFO_FULL_MASK (1 24) +#define RX_FIFO_COUNT_SHIFT0 +#define RX_FIFO_COUNT_MASK (0xff RX_FIFO_COUNT_SHIFT) +#define RX_FIFO_FULL (1 8) +#define TX_FIFO_COUNT_SHIFT16 +#define TX_FIFO_COUNT_MASK (0xff TX_FIFO_COUNT_SHIFT) +#define TX_FIFO_FULL (1 24) /* Information about a serial port */ -struct fdt_serial { - u32 base_addr; /* address of registers in physical memory */ +struct s5p_serial_platdata { + struct s5p_uart *reg; /* address of registers in physical memory */ u8 port_id; /* uart port number */ - u8 enabled; /* 1 if enabled, 0 if disabled */ -} config __attribute__ ((section(.data))); - -static inline struct s5p_uart *s5p_get_base_uart(int dev_index) -{ -#ifdef CONFIG_OF_CONTROL - return (struct s5p_uart *)(config.base_addr); -#else - u32 offset = dev_index * sizeof(struct s5p_uart); - return (struct s5p_uart *)(samsung_get_base_uart() + offset); -#endif -} +}; /* * The coefficient, used to calculate the baudrate on S5P UARTs is @@ -65,23 +59,13 @@ static const int udivslot[] = { 0xffdf, }; -static void serial_setbrg_dev(const int dev_index) +int s5p_serial_setbrg(struct udevice *dev, int baudrate) { - struct s5p_uart *const uart = s5p_get_base_uart(dev_index); - u32 uclk = get_uart_clk(dev_index); - u32 baudrate = gd-baudrate; + struct s5p_serial_platdata *plat = dev-platdata; + struct s5p_uart *const uart = plat-reg; + u32 uclk = get_uart_clk(plat-port_id); u32 val; -#if defined(CONFIG_SILENT_CONSOLE) \ - defined(CONFIG_OF_CONTROL) \ - !defined(CONFIG_SPL_BUILD) - if (fdtdec_get_config_int(gd-fdt_blob, silent_console, 0)) - gd-flags |= GD_FLG_SILENT; -#endif - - if (!config.enabled) - return; - val = uclk / baudrate; writel(val / 16 - 1, uart-ubrdiv); @@ -90,15 +74,14 @@ static void serial_setbrg_dev(const int dev_index) writew(udivslot[val % 16], uart-rest.slot); else writeb(val % 16, uart-rest.value); + + return 0; } -/* - * Initialise the serial port with the given baudrate. The settings - * are always 8 data bits, no parity, 1 stop bit, no start bits. - */ -static int serial_init_dev(const int dev_index) +static int s5p_serial_probe(struct udevice *dev) { - struct s5p_uart *const uart = s5p_get_base_uart(dev_index); + struct s5p_serial_platdata *plat = dev-platdata; + struct s5p_uart *const uart = plat-reg; /* enable FIFOs, auto clear Rx FIFO */ writel(0x3, uart-ufcon); @@ -108,14 +91,11 @@ static int serial_init_dev(const int dev_index) /* No interrupts, no DMA, pure polling */ writel(0x245, uart-ucon); - serial_setbrg_dev(dev_index); - return 0; } -static int serial_err_check(const int dev_index, int op) +static int serial_err_check(const struct s5p_uart *const uart, int op) { - struct s5p_uart *const uart = s5p_get_base_uart(dev_index); unsigned int mask; /* @@ -133,169 +113,78 @@ static int serial_err_check(const int dev_index, int op) return readl(uart-uerstat) mask; } -/* - * Read a single byte from the serial port. Returns 1 on success, 0 - * otherwise. When the function is succesfull, the character read is - * written into its argument c. - */ -static int serial_getc_dev(const int dev_index) +static int s5p_serial_getc(struct udevice *dev) { - struct s5p_uart *const uart = s5p_get_base_uart(dev_index); - - if (!config.enabled) - return 0; + struct s5p_serial_platdata *plat = dev-platdata; + struct s5p_uart *const uart = plat-reg; - /* wait for character to arrive */ - while (!(readl(uart-ufstat) (RX_FIFO_COUNT_MASK | -RX_FIFO_FULL_MASK))) { - if (serial_err_check(dev_index, 0)) - return 0; - } + if (!(readl(uart-ufstat) RX_FIFO_COUNT_MASK)) + return -EAGAIN;
[U-Boot] [PATCH v5 03/14] dm: Adjust lists_bind_fdt() to return the bound device
Allow the caller to find out the device that was bound in response to this call. Signed-off-by: Simon Glass s...@chromium.org --- Changes in v5: None Changes in v4: None Changes in v3: - Add new change to enhance lists_bind_fdt() Changes in v2: None drivers/core/lists.c | 10 +++--- drivers/core/root.c | 2 +- include/dm/lists.h | 6 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/core/lists.c b/drivers/core/lists.c index 0f08bfd..699f94b 100644 --- a/drivers/core/lists.c +++ b/drivers/core/lists.c @@ -118,7 +118,8 @@ static int driver_check_compatible(const void *blob, int offset, return -ENOENT; } -int lists_bind_fdt(struct udevice *parent, const void *blob, int offset) +int lists_bind_fdt(struct udevice *parent, const void *blob, int offset, + struct udevice **devp) { struct driver *driver = ll_entry_start(struct driver, driver); const int n_ents = ll_entry_count(struct driver, driver); @@ -130,6 +131,8 @@ int lists_bind_fdt(struct udevice *parent, const void *blob, int offset) int ret = 0; dm_dbg(bind node %s\n, fdt_get_name(blob, offset, NULL)); + if (devp) + *devp = NULL; for (entry = driver; entry != driver + n_ents; entry++) { ret = driver_check_compatible(blob, offset, entry-of_match); name = fdt_get_name(blob, offset, NULL); @@ -149,10 +152,11 @@ int lists_bind_fdt(struct udevice *parent, const void *blob, int offset) ret = device_bind(parent, entry, name, NULL, offset, dev); if (ret) { dm_warn(Error binding driver '%s'\n, entry-name); - if (!result || ret != -ENOENT) - result = ret; + return ret; } else { found = true; + if (devp) + *devp = dev; } break; } diff --git a/drivers/core/root.c b/drivers/core/root.c index 393dd98..a328a48 100644 --- a/drivers/core/root.c +++ b/drivers/core/root.c @@ -91,7 +91,7 @@ int dm_scan_fdt_node(struct udevice *parent, const void *blob, int offset, if (pre_reloc_only !fdt_getprop(blob, offset, u-boot,dm-pre-reloc, NULL)) continue; - err = lists_bind_fdt(parent, blob, offset); + err = lists_bind_fdt(parent, blob, offset, NULL); if (err !ret) ret = err; } diff --git a/include/dm/lists.h b/include/dm/lists.h index 87a3af5..2356895 100644 --- a/include/dm/lists.h +++ b/include/dm/lists.h @@ -53,7 +53,11 @@ int lists_bind_drivers(struct udevice *parent, bool pre_reloc_only); * @parent: parent driver (root) * @blob: device tree blob * @offset: offset of this device tree node + * @devp: if non-NULL, returns a pointer to the bound device + * @return 0 if device was bound, -EINVAL if the device tree is invalid, + * other -ve value on error */ -int lists_bind_fdt(struct udevice *parent, const void *blob, int offset); +int lists_bind_fdt(struct udevice *parent, const void *blob, int offset, + struct udevice **devp); #endif -- 2.1.0.rc2.206.gedb03e5 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v5 11/14] dm: serial: Collect common baud rate code in ns16550
The same sequence is used in several places, so move it into a function. Note that UART_LCR_BKSE is an alias for UART_LCR_DLAB. Signed-off-by: Simon Glass s...@chromium.org --- Changes in v5: None Changes in v4: None Changes in v3: - Add new patch to collect common baud rate code in ns16550 Changes in v2: None drivers/serial/ns16550.c | 33 + 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index 3f5f4ef..d54eba6 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -61,6 +61,14 @@ int ns16550_calc_divisor(NS16550_t port, int clock, int baudrate) return DIV_ROUND_CLOSEST(clock, mode_x_div * baudrate); } +static void NS16550_setbrg(NS16550_t com_port, int baud_divisor) +{ + serial_out(UART_LCR_BKSE | UART_LCRVAL, com_port-lcr); + serial_out(baud_divisor 0xff, com_port-dll); + serial_out((baud_divisor 8) 0xff, com_port-dlm); + serial_out(UART_LCRVAL, com_port-lcr); +} + void NS16550_init(NS16550_t com_port, int baud_divisor) { #if (defined(CONFIG_SPL_BUILD) defined(CONFIG_OMAP34XX)) @@ -71,10 +79,7 @@ void NS16550_init(NS16550_t com_port, int baud_divisor) */ if ((serial_in(com_port-lsr) (UART_LSR_TEMT | UART_LSR_THRE)) == UART_LSR_THRE) { - serial_out(UART_LCR_DLAB, com_port-lcr); - serial_out(baud_divisor 0xff, com_port-dll); - serial_out((baud_divisor 8) 0xff, com_port-dlm); - serial_out(UART_LCRVAL, com_port-lcr); + NS16550_setbrg(com_port, baud_divisor); serial_out(0, com_port-mdr1); } #endif @@ -87,16 +92,10 @@ void NS16550_init(NS16550_t com_port, int baud_divisor) defined(CONFIG_TI81XX) || defined(CONFIG_AM43XX) serial_out(0x7, com_port-mdr1); /* mode select reset TL16C750*/ #endif - serial_out(UART_LCR_BKSE | UART_LCRVAL, com_port-lcr); - serial_out(0, com_port-dll); - serial_out(0, com_port-dlm); - serial_out(UART_LCRVAL, com_port-lcr); + NS16550_setbrg(com_port, 0); serial_out(UART_MCRVAL, com_port-mcr); serial_out(UART_FCRVAL, com_port-fcr); - serial_out(UART_LCR_BKSE | UART_LCRVAL, com_port-lcr); - serial_out(baud_divisor 0xff, com_port-dll); - serial_out((baud_divisor 8) 0xff, com_port-dlm); - serial_out(UART_LCRVAL, com_port-lcr); + NS16550_setbrg(com_port, baud_divisor); #if defined(CONFIG_OMAP) || \ defined(CONFIG_AM33XX) || defined(CONFIG_SOC_DA8XX) || \ defined(CONFIG_TI81XX) || defined(CONFIG_AM43XX) @@ -113,16 +112,10 @@ void NS16550_init(NS16550_t com_port, int baud_divisor) void NS16550_reinit(NS16550_t com_port, int baud_divisor) { serial_out(CONFIG_SYS_NS16550_IER, com_port-ier); - serial_out(UART_LCR_BKSE | UART_LCRVAL, com_port-lcr); - serial_out(0, com_port-dll); - serial_out(0, com_port-dlm); - serial_out(UART_LCRVAL, com_port-lcr); + NS16550_setbrg(com_port, 0); serial_out(UART_MCRVAL, com_port-mcr); serial_out(UART_FCRVAL, com_port-fcr); - serial_out(UART_LCR_BKSE, com_port-lcr); - serial_out(baud_divisor 0xff, com_port-dll); - serial_out((baud_divisor 8) 0xff, com_port-dlm); - serial_out(UART_LCRVAL, com_port-lcr); + NS16550_setbrg(com_port, baud_divisor); } #endif /* CONFIG_NS16550_MIN_FUNCTIONS */ -- 2.1.0.rc2.206.gedb03e5 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v5 07/14] sandbox: dts: Add a serial console node
If the sandbox device tree is provided to U-Boot (with the -d flag) then it will use the device tree version in preference to the built-in device. The only difference is the colour. Signed-off-by: Simon Glass s...@chromium.org --- Changes in v5: - Use /chosen/stdout-path instead of /aliases/console to specify the console Changes in v4: - Add a binding for sandbox serial - Remove pre-reloc fdt property Changes in v3: - Change pre-reloc fdt property to 'u-boot,dm-pre-reloc' Changes in v2: None arch/sandbox/dts/sandbox.dts | 10 ++ doc/device-tree-bindings/serial/sandbox-serial.txt | 13 + 2 files changed, 23 insertions(+) create mode 100644 doc/device-tree-bindings/serial/sandbox-serial.txt diff --git a/arch/sandbox/dts/sandbox.dts b/arch/sandbox/dts/sandbox.dts index efffacb..797478a 100644 --- a/arch/sandbox/dts/sandbox.dts +++ b/arch/sandbox/dts/sandbox.dts @@ -1,6 +1,16 @@ /dts-v1/; / { + chosen { + stdout-path = /serial; + }; + + /* Needs to be available prior to relocation */ + uart0: serial { + compatible = sandbox,serial; + sandbox,text-colour = cyan; + }; + triangle { compatible = demo-shape; colour = cyan; diff --git a/doc/device-tree-bindings/serial/sandbox-serial.txt b/doc/device-tree-bindings/serial/sandbox-serial.txt new file mode 100644 index 000..f429c90 --- /dev/null +++ b/doc/device-tree-bindings/serial/sandbox-serial.txt @@ -0,0 +1,13 @@ +Sandbox serial + +The sandbox serial device is an emulated device which displays its output +on the host machine's console, and accepts input from its keyboard. + +Required properties: + compatible: sandbox,serial + +Optional properties: + sandbox,text-colour: If present, this is the colour of the console text. +Supported values are: +black, red, green, yellow, blue, megenta, cyan, +white -- 2.1.0.rc2.206.gedb03e5 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v5 08/14] dm: exynos: Mark exynos5 console as pre-reloc
We will need the console before relocation, so mark it that way. Signed-off-by: Simon Glass s...@chromium.org --- Changes in v5: None Changes in v4: None Changes in v3: - Change pre-reloc fdt property to 'u-boot,dm-pre-reloc' Changes in v2: None arch/arm/dts/exynos5.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm/dts/exynos5.dtsi b/arch/arm/dts/exynos5.dtsi index dc5405b..e539068 100644 --- a/arch/arm/dts/exynos5.dtsi +++ b/arch/arm/dts/exynos5.dtsi @@ -244,6 +244,7 @@ compatible = samsung,exynos4210-uart; reg = 0x12C3 0x100; interrupts = 0 54 0; + u-boot,dm-pre-reloc; id = 3; }; -- 2.1.0.rc2.206.gedb03e5 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v5 12/14] dm: serial: Add driver model support for ns16550
Add driver model support so that ns16550 can support operation both with and without driver model. The driver needs a clock frequency so cannot stand alone unfortunately. The clock frequency must be provided by a separate driver. Signed-off-by: Simon Glass s...@chromium.org --- Changes in v5: - Add struct udevice declaration Changes in v4: - Remove clock frequency setup for ns16550 driver Changes in v3: - Add new patch to support driver model in ns16550 Changes in v2: None doc/device-tree-bindings/serial/ns16550.txt | 10 ++ drivers/serial/Makefile | 2 +- drivers/serial/ns16550.c| 156 +++- include/ns16550.h | 53 ++ 4 files changed, 218 insertions(+), 3 deletions(-) create mode 100644 doc/device-tree-bindings/serial/ns16550.txt diff --git a/doc/device-tree-bindings/serial/ns16550.txt b/doc/device-tree-bindings/serial/ns16550.txt new file mode 100644 index 000..ef0b9ae --- /dev/null +++ b/doc/device-tree-bindings/serial/ns16550.txt @@ -0,0 +1,10 @@ +NS16550 UART + +This UART driver supports many chip variants and is used in mamy SoCs. + +Required properties: +- compatible: ns16550 or nvidia,tegra20-uart +- reg: start address and size of registers +- reg-shift: shift value indicating register size: 0=byte, 1=16bit,2=32bit etc. +- clock-frequency: input clock frequency for the UART (used to calculate the +baud rate divisor) diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile index 4720e1d..5ae6416 100644 --- a/drivers/serial/Makefile +++ b/drivers/serial/Makefile @@ -9,6 +9,7 @@ ifdef CONFIG_DM_SERIAL obj-y += serial-uclass.o else obj-y += serial.o +obj-$(CONFIG_SYS_NS16550_SERIAL) += serial_ns16550.o endif obj-$(CONFIG_ALTERA_UART) += altera_uart.o @@ -20,7 +21,6 @@ obj-$(CONFIG_MCFUART) += mcfuart.o obj-$(CONFIG_OPENCORES_YANU) += opencores_yanu.o obj-$(CONFIG_SYS_NS16550) += ns16550.o obj-$(CONFIG_S5P) += serial_s5p.o -obj-$(CONFIG_SYS_NS16550_SERIAL) += serial_ns16550.o obj-$(CONFIG_IMX_SERIAL) += serial_imx.o obj-$(CONFIG_KS8695_SERIAL) += serial_ks8695.o obj-$(CONFIG_MAX3100_SERIAL) += serial_max3100.o diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index d54eba6..63a9ef6 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -5,17 +5,25 @@ */ #include common.h +#include dm.h +#include errno.h +#include fdtdec.h #include ns16550.h +#include serial.h #include watchdog.h #include linux/types.h #include asm/io.h +DECLARE_GLOBAL_DATA_PTR; + #define UART_LCRVAL UART_LCR_8N1 /* 8 data, 1 stop, no parity */ #define UART_MCRVAL (UART_MCR_DTR | \ UART_MCR_RTS) /* RTS/DTR */ #define UART_FCRVAL (UART_FCR_FIFO_EN |\ UART_FCR_RXSR |\ UART_FCR_TXSR) /* Clear enable FIFOs */ + +#ifndef CONFIG_DM_SERIAL #ifdef CONFIG_SYS_NS16550_PORT_MAPPED #define serial_out(x, y) outb(x, (ulong)y) #define serial_in(y) inb((ulong)y) @@ -29,6 +37,7 @@ #define serial_out(x, y) writeb(x, y) #define serial_in(y) readb(y) #endif +#endif /* !CONFIG_DM_SERIAL */ #if defined(CONFIG_SOC_KEYSTONE) #define UART_REG_VAL_PWREMU_MGMT_UART_DISABLE 0 @@ -45,6 +54,58 @@ #define CONFIG_SYS_NS16550_IER 0x00 #endif /* CONFIG_SYS_NS16550_IER */ +#ifdef CONFIG_DM_SERIAL +static void ns16550_writeb(NS16550_t port, int offset, int value) +{ + struct ns16550_platdata *plat = port-plat; + unsigned char *addr; + + offset *= 1 plat-reg_shift; + addr = plat-base + offset; + /* +* As far as we know it doesn't make sense to support selection of +* these options at run-time, so use the existing CONFIG options. +*/ +#ifdef CONFIG_SYS_NS16550_PORT_MAPPED + outb(value, addr); +#elif defined(CONFIG_SYS_NS16550_MEM32) !defined(CONFIG_SYS_BIG_ENDIAN) + out_le32(addr, value); +#elif defined(CONFIG_SYS_NS16550_MEM32) defined(CONFIG_SYS_BIG_ENDIAN) + out_be32(addr, value); +#elif defined(CONFIG_SYS_BIG_ENDIAN) + writeb(value, addr + (1 plat-reg_shift) - 1); +#else + writeb(value, addr); +#endif +} + +static int ns16550_readb(NS16550_t port, int offset) +{ + struct ns16550_platdata *plat = port-plat; + unsigned char *addr; + + offset *= 1 plat-reg_shift; + addr = plat-base + offset; +#ifdef CONFIG_SYS_NS16550_PORT_MAPPED + return inb(addr); +#elif defined(CONFIG_SYS_NS16550_MEM32) !defined(CONFIG_SYS_BIG_ENDIAN) + return in_le32(addr); +#elif defined(CONFIG_SYS_NS16550_MEM32) defined(CONFIG_SYS_BIG_ENDIAN) + return in_be32(addr); +#elif defined(CONFIG_SYS_BIG_ENDIAN) + return readb(addr + (1 plat-reg_shift) - 1); +#else + return readb(addr); +#endif +} + +/* We can clean these up once everything is moved to driver model */ +#define serial_out(value, addr)\ +
[U-Boot] [PATCH v5 13/14] tegra: dts: Add serial port details
Some Tegra device tree files do not include information about the serial ports. Add this and also add information about the input clock speed. The console alias needs to be set up to indicate which port is used for the console. Also add a binding file since this is missing. Series-changes; 5 - Add full serial port nodes from Linux tree (commit fc9d4dbe) - Use /chosen/stdout-path instead of /aliases/console to specify the console Signed-off-by: Simon Glass s...@chromium.org --- Changes in v5: None Changes in v4: - Remove 'clock-frequency' property from serial nodes Changes in v3: - Add new patch for tegra serial port details Changes in v2: None arch/arm/dts/tegra114-dalmore.dts | 4 + arch/arm/dts/tegra114.dtsi| 53 + arch/arm/dts/tegra124-jetson-tk1.dts | 4 + arch/arm/dts/tegra124-venice2.dts | 4 + arch/arm/dts/tegra124.dtsi| 66 ++ arch/arm/dts/tegra20-colibri_t20_iris.dts | 4 + arch/arm/dts/tegra20-harmony.dts | 4 + arch/arm/dts/tegra20-medcom-wide.dts | 4 + arch/arm/dts/tegra20-paz00.dts| 4 + arch/arm/dts/tegra20-plutux.dts | 4 + arch/arm/dts/tegra20-seaboard.dts | 4 + arch/arm/dts/tegra20-tec.dts | 4 + arch/arm/dts/tegra20-trimslice.dts| 4 + arch/arm/dts/tegra20-ventana.dts | 4 + arch/arm/dts/tegra20-whistler.dts | 4 + arch/arm/dts/tegra20.dtsi | 51 - arch/arm/dts/tegra30-beaver.dts | 4 + arch/arm/dts/tegra30-cardhu.dts | 4 + arch/arm/dts/tegra30-tamonten.dtsi| 4 + arch/arm/dts/tegra30.dtsi | 66 ++ include/dt-bindings/clock/tegra114-car.h | 342 ++ include/dt-bindings/clock/tegra124-car.h | 342 ++ include/dt-bindings/clock/tegra20-car.h | 158 ++ include/dt-bindings/clock/tegra30-car.h | 273 24 files changed, 1405 insertions(+), 10 deletions(-) create mode 100644 include/dt-bindings/clock/tegra114-car.h create mode 100644 include/dt-bindings/clock/tegra124-car.h create mode 100644 include/dt-bindings/clock/tegra20-car.h create mode 100644 include/dt-bindings/clock/tegra30-car.h diff --git a/arch/arm/dts/tegra114-dalmore.dts b/arch/arm/dts/tegra114-dalmore.dts index 435c01e..81ad212 100644 --- a/arch/arm/dts/tegra114-dalmore.dts +++ b/arch/arm/dts/tegra114-dalmore.dts @@ -6,6 +6,10 @@ model = NVIDIA Dalmore; compatible = nvidia,dalmore, nvidia,tegra114; + chosen { + stdout-path = uartd; + }; + aliases { i2c0 = /i2c@7000d000; i2c1 = /i2c@7000c000; diff --git a/arch/arm/dts/tegra114.dtsi b/arch/arm/dts/tegra114.dtsi index 59434e0..88bdc49 100644 --- a/arch/arm/dts/tegra114.dtsi +++ b/arch/arm/dts/tegra114.dtsi @@ -1,3 +1,4 @@ +#include dt-bindings/clock/tegra114-car.h #include dt-bindings/gpio/tegra-gpio.h #include dt-bindings/interrupt-controller/arm-gic.h @@ -116,6 +117,58 @@ status = disabled; }; + uarta: serial@70006000 { + compatible = nvidia,tegra114-uart, nvidia,tegra20-uart; + reg = 0x70006000 0x40; + reg-shift = 2; + interrupts = GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH; + clocks = tegra_car TEGRA114_CLK_UARTA; + resets = tegra_car 6; + reset-names = serial; + dmas = apbdma 8, apbdma 8; + dma-names = rx, tx; + status = disabled; + }; + + uartb: serial@70006040 { + compatible = nvidia,tegra114-uart, nvidia,tegra20-uart; + reg = 0x70006040 0x40; + reg-shift = 2; + interrupts = GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH; + clocks = tegra_car TEGRA114_CLK_UARTB; + resets = tegra_car 7; + reset-names = serial; + dmas = apbdma 9, apbdma 9; + dma-names = rx, tx; + status = disabled; + }; + + uartc: serial@70006200 { + compatible = nvidia,tegra114-uart, nvidia,tegra20-uart; + reg = 0x70006200 0x100; + reg-shift = 2; + interrupts = GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH; + clocks = tegra_car TEGRA114_CLK_UARTC; + resets = tegra_car 55; + reset-names = serial; + dmas = apbdma 10, apbdma 10; + dma-names = rx, tx; + status = disabled; + }; + + uartd: serial@70006300 { + compatible = nvidia,tegra114-uart, nvidia,tegra20-uart; + reg = 0x70006300 0x100; + reg-shift = 2; + interrupts = GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH; + clocks = tegra_car TEGRA114_CLK_UARTD; + resets = tegra_car 65; + reset-names = serial; +
[U-Boot] [PATCH v5 10/14] dm: serial: Move baud rate calculation to ns16550.c
Move the function that calculates the baud rate divisor into ns16550.c so it can be used by that file. Signed-off-by: Simon Glass s...@chromium.org --- Changes in v5: None Changes in v4: None Changes in v3: - Add new patch to move baud rate calculation to ns16550.c Changes in v2: None drivers/serial/ns16550.c| 18 +- drivers/serial/serial_ns16550.c | 14 -- include/ns16550.h | 13 + 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index 079f67d..3f5f4ef 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -4,7 +4,7 @@ * modified to use CONFIG_SYS_ISA_MEM and new defines */ -#include config.h +#include common.h #include ns16550.h #include watchdog.h #include linux/types.h @@ -45,6 +45,22 @@ #define CONFIG_SYS_NS16550_IER 0x00 #endif /* CONFIG_SYS_NS16550_IER */ +int ns16550_calc_divisor(NS16550_t port, int clock, int baudrate) +{ + const unsigned int mode_x_div = 16; + +#ifdef CONFIG_OMAP1510 + /* If can't cleanly clock 115200 set div to 1 */ + if ((clock == 1200) (baudrate == 115200)) { + port-osc_12m_sel = OSC_12M_SEL; /* enable 6.5 * divisor */ + return 1; /* return 1 for base divisor */ + } + port-osc_12m_sel = 0; /* clear if previsouly set */ +#endif + + return DIV_ROUND_CLOSEST(clock, mode_x_div * baudrate); +} + void NS16550_init(NS16550_t com_port, int baud_divisor) { #if (defined(CONFIG_SPL_BUILD) defined(CONFIG_OMAP34XX)) diff --git a/drivers/serial/serial_ns16550.c b/drivers/serial/serial_ns16550.c index dafeed7..632da4c 100644 --- a/drivers/serial/serial_ns16550.c +++ b/drivers/serial/serial_ns16550.c @@ -81,7 +81,8 @@ static NS16550_t serial_ports[6] = { static int eserial##port##_init(void) \ { \ int clock_divisor; \ - clock_divisor = calc_divisor(serial_ports[port-1]); \ + clock_divisor = ns16550_calc_divisor(serial_ports[port-1], \ + CONFIG_SYS_NS16550_CLK, gd-baudrate); \ NS16550_init(serial_ports[port-1], clock_divisor); \ return 0 ; \ } \ @@ -118,14 +119,6 @@ static NS16550_t serial_ports[6] = { .puts = eserial##port##_puts, \ } -static int calc_divisor (NS16550_t port) -{ - const unsigned int mode_x_div = 16; - - return DIV_ROUND_CLOSEST(CONFIG_SYS_NS16550_CLK, - mode_x_div * gd-baudrate); -} - void _serial_putc(const char c,const int port) { @@ -167,7 +160,8 @@ _serial_setbrg (const int port) { int clock_divisor; - clock_divisor = calc_divisor(PORT); + clock_divisor = ns16550_calc_divisor(PORT, CONFIG_SYS_NS16550_CLK, +gd-baudrate); NS16550_reinit(PORT, clock_divisor); } diff --git a/include/ns16550.h b/include/ns16550.h index d1f3a90..d93e28e 100644 --- a/include/ns16550.h +++ b/include/ns16550.h @@ -170,3 +170,16 @@ void NS16550_putc(NS16550_t com_port, char c); char NS16550_getc(NS16550_t com_port); int NS16550_tstc(NS16550_t com_port); void NS16550_reinit(NS16550_t com_port, int baud_divisor); + +/** + * ns16550_calc_divisor() - calculate the divisor given clock and baud rate + * + * Given the UART input clock and required baudrate, calculate the divisor + * that should be used. + * + * @port: UART port + * @clock: UART input clock speed in Hz + * @baudrate: Required baud rate + * @return baud rate divisor that should be used + */ +int ns16550_calc_divisor(NS16550_t port, int clock, int baudrate); -- 2.1.0.rc2.206.gedb03e5 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v5 04/14] dm: Add a uclass for serial devices
Serial devices support simple byte input/output and a few operations to find out whether data is available. Add a basic uclass for serial devices to be used by drivers that are converted to driver model. Signed-off-by: Simon Glass s...@chromium.org --- Changes in v5: - Use /chosen/stdout-path instead of /aliases/console to specify the console Changes in v4: None Changes in v3: - Automatically bind the console even if not marked for pre-relocation Changes in v2: - Rename struct device to struct udevice drivers/serial/Makefile| 4 + drivers/serial/serial-uclass.c | 214 + include/dm/uclass-id.h | 1 + include/serial.h | 92 ++ 4 files changed, 311 insertions(+) create mode 100644 drivers/serial/serial-uclass.c diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile index 571c18f..4720e1d 100644 --- a/drivers/serial/Makefile +++ b/drivers/serial/Makefile @@ -5,7 +5,11 @@ # SPDX-License-Identifier: GPL-2.0+ # +ifdef CONFIG_DM_SERIAL +obj-y += serial-uclass.o +else obj-y += serial.o +endif obj-$(CONFIG_ALTERA_UART) += altera_uart.o obj-$(CONFIG_ALTERA_JTAG_UART) += altera_jtag_uart.o diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c new file mode 100644 index 000..cb491a8 --- /dev/null +++ b/drivers/serial/serial-uclass.c @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2014 The Chromium OS Authors. + * + * SPDX-License-Identifier:GPL-2.0+ + */ + +#include common.h +#include dm.h +#include errno.h +#include fdtdec.h +#include os.h +#include serial.h +#include stdio_dev.h +#include dm/lists.h +#include dm/device-internal.h + +DECLARE_GLOBAL_DATA_PTR; + +/* The currently-selected console serial device */ +struct udevice *cur_dev __attribute__ ((section(.data))); + +#ifndef CONFIG_SYS_MALLOC_F_LEN +#error Serial is required before relocation - define CONFIG_SYS_MALLOC_F_LEN to make this work +#endif + +static void serial_find_console_or_panic(void) +{ + int node; + + /* Check for a chosen console */ + node = fdtdec_get_chosen_node(gd-fdt_blob, stdout-path); + if (!uclass_get_device_by_of_offset(UCLASS_SERIAL, node, cur_dev)) + return; + node = fdtdec_get_alias_node(gd-fdt_blob, console); + if (!uclass_get_device_by_of_offset(UCLASS_SERIAL, node, cur_dev)) + return; + + /* +* If the console is not marked to be bound before relocation, bind +* it anyway. +*/ + if (node 0 + !lists_bind_fdt(gd-dm_root, gd-fdt_blob, node, cur_dev)) { + if (!device_probe(cur_dev)) + return; + cur_dev = NULL; + } + + /* +* Failing that, get the device with sequence number 0, or in extremis +* just the first serial device we can find. But we insist on having +* a console (even if it is silent). +*/ + if (uclass_get_device_by_seq(UCLASS_SERIAL, 0, cur_dev) + (uclass_first_device(UCLASS_SERIAL, cur_dev) || !cur_dev)) + panic(No serial driver found); +} + +/* Called prior to relocation */ +int serial_init(void) +{ + serial_find_console_or_panic(); + gd-flags |= GD_FLG_SERIAL_READY; + + return 0; +} + +/* Called after relocation */ +void serial_initialize(void) +{ + serial_find_console_or_panic(); +} + +void serial_putc(char ch) +{ + struct dm_serial_ops *ops = serial_get_ops(cur_dev); + int err; + + do { + err = ops-putc(cur_dev, ch); + } while (err == -EAGAIN); + if (ch == '\n') + serial_putc('\r'); +} + +void serial_setbrg(void) +{ + struct dm_serial_ops *ops = serial_get_ops(cur_dev); + + if (ops-setbrg) + ops-setbrg(cur_dev, gd-baudrate); +} + +void serial_puts(const char *str) +{ + while (*str) + serial_putc(*str++); +} + +int serial_tstc(void) +{ + struct dm_serial_ops *ops = serial_get_ops(cur_dev); + + if (ops-pending) + return ops-pending(cur_dev, true); + + return 1; +} + +int serial_getc(void) +{ + struct dm_serial_ops *ops = serial_get_ops(cur_dev); + int err; + + do { + err = ops-getc(cur_dev); + } while (err == -EAGAIN); + + return err = 0 ? err : 0; +} + +void serial_stdio_init(void) +{ +} + +void serial_stub_putc(struct stdio_dev *sdev, const char ch) +{ + struct udevice *dev = sdev-priv; + struct dm_serial_ops *ops = serial_get_ops(dev); + + ops-putc(dev, ch); +} + +void serial_stub_puts(struct stdio_dev *sdev, const char *str) +{ + while (*str) + serial_stub_putc(sdev, *str++); +} + +int serial_stub_getc(struct stdio_dev *sdev) +{ + struct udevice *dev = sdev-priv; + struct dm_serial_ops *ops = serial_get_ops(dev); + + int err; + + do { + err = ops-getc(dev); + }
[U-Boot] [PATCH v5 06/14] sandbox: serial: Support a coloured console
The current sandbox serial driver is a pretty trivial example and does not have the featues that might be needed for other board serial drivers. To help provide a better example, add a text colour property to the device tree for sandbox. This uses platform data, a device tree node, driver private data and a remove() method. Signed-off-by: Simon Glass s...@chromium.org --- Changes in v5: None Changes in v4: None Changes in v3: None Changes in v2: - Rename struct device to struct udevice drivers/serial/sandbox.c | 83 1 file changed, 83 insertions(+) diff --git a/drivers/serial/sandbox.c b/drivers/serial/sandbox.c index ac54e01..cd2f91e 100644 --- a/drivers/serial/sandbox.c +++ b/drivers/serial/sandbox.c @@ -34,19 +34,67 @@ static char serial_buf[16]; static unsigned int serial_buf_write; static unsigned int serial_buf_read; +struct sandbox_serial_platdata { + int colour; /* Text colour to use for output, -1 for none */ +}; + +struct sandbox_serial_priv { + bool start_of_line; +}; + +/** + * output_ansi_colour() - Output an ANSI colour code + * + * @colour: Colour to output (0-7) + */ +static void output_ansi_colour(int colour) +{ + char ansi_code[] = \x1b[1;3Xm; + + ansi_code[5] = '0' + colour; + os_write(1, ansi_code, sizeof(ansi_code) - 1); +} + +static void output_ansi_reset(void) +{ + os_write(1, \x1b[0m, 4); +} + static int sandbox_serial_probe(struct udevice *dev) { struct sandbox_state *state = state_get_current(); + struct sandbox_serial_priv *priv = dev_get_priv(dev); if (state-term_raw != STATE_TERM_COOKED) os_tty_raw(0, state-term_raw == STATE_TERM_RAW_WITH_SIGS); + priv-start_of_line = 0; + + return 0; +} + +static int sandbox_serial_remove(struct udevice *dev) +{ + struct sandbox_serial_platdata *plat = dev-platdata; + + if (plat-colour != -1) + output_ansi_reset(); return 0; } static int sandbox_serial_putc(struct udevice *dev, const char ch) { + struct sandbox_serial_priv *priv = dev_get_priv(dev); + struct sandbox_serial_platdata *plat = dev-platdata; + + if (priv-start_of_line plat-colour != -1) { + priv-start_of_line = false; + output_ansi_colour(plat-colour); + } + os_write(1, ch, 1); + if (ch == '\n') + priv-start_of_line = true; return 0; } @@ -91,6 +139,32 @@ static int sandbox_serial_getc(struct udevice *dev) return result; } +static const char * const ansi_colour[] = { + black, red, green, yellow, blue, megenta, cyan, + white, +}; + +static int sandbox_serial_ofdata_to_platdata(struct udevice *dev) +{ + struct sandbox_serial_platdata *plat = dev-platdata; + const char *colour; + int i; + + plat-colour = -1; + colour = fdt_getprop(gd-fdt_blob, dev-of_offset, +sandbox,text-colour, NULL); + if (colour) { + for (i = 0; i ARRAY_SIZE(ansi_colour); i++) { + if (!strcmp(colour, ansi_colour[i])) { + plat-colour = i; + break; + } + } + } + + return 0; +} + static const struct dm_serial_ops sandbox_serial_ops = { .putc = sandbox_serial_putc, .pending = sandbox_serial_pending, @@ -106,11 +180,20 @@ U_BOOT_DRIVER(serial_sandbox) = { .name = serial_sandbox, .id = UCLASS_SERIAL, .of_match = sandbox_serial_ids, + .ofdata_to_platdata = sandbox_serial_ofdata_to_platdata, + .platdata_auto_alloc_size = sizeof(struct sandbox_serial_platdata), + .priv_auto_alloc_size = sizeof(struct sandbox_serial_priv), .probe = sandbox_serial_probe, + .remove = sandbox_serial_remove, .ops= sandbox_serial_ops, .flags = DM_FLAG_PRE_RELOC, }; +static const struct sandbox_serial_platdata platdata_non_fdt = { + .colour = -1, +}; + U_BOOT_DEVICE(serial_sandbox_non_fdt) = { .name = serial_sandbox, + .platdata = platdata_non_fdt, }; -- 2.1.0.rc2.206.gedb03e5 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v5 14/14] dm: tegra: Enable driver model for serial
Use driver model for serial ports. Since Tegra now uses driver model for serial, adjust the definition of V_NS16550_CLK so that it is clear that this is only used for SPL. Signed-off-by: Simon Glass s...@chromium.org --- Changes in v5: None Changes in v4: - Add a separate Tegra serial driver to deal with the clock issue - Add new CONFIG_TEGRA_SERIAL option to enable dm driver - Use hard-coded UART clock from Tegra configuration Changes in v3: - Add new patch to enable driver model for serial on tegra - Add new patch to use V_NS16550_CLK only in SPL builds Changes in v2: None drivers/serial/Makefile| 1 + drivers/serial/serial_tegra.c | 38 ++ include/configs/tegra-common.h | 9 - 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 drivers/serial/serial_tegra.c diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile index 5ae6416..853a8c6 100644 --- a/drivers/serial/Makefile +++ b/drivers/serial/Makefile @@ -38,6 +38,7 @@ obj-$(CONFIG_BFIN_SERIAL) += serial_bfin.o obj-$(CONFIG_FSL_LPUART) += serial_lpuart.o obj-$(CONFIG_MXS_AUART) += mxs_auart.o obj-$(CONFIG_ARC_SERIAL) += serial_arc.o +obj-$(CONFIG_TEGRA_SERIAL) += serial_tegra.o ifndef CONFIG_SPL_BUILD obj-$(CONFIG_USB_TTY) += usbtty.o diff --git a/drivers/serial/serial_tegra.c b/drivers/serial/serial_tegra.c new file mode 100644 index 000..7eb70e1 --- /dev/null +++ b/drivers/serial/serial_tegra.c @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2014 Google, Inc + * + * SPDX-License-Identifier:GPL-2.0+ + */ + +#include common.h +#include dm.h +#include ns16550.h +#include serial.h + +static const struct udevice_id tegra_serial_ids[] = { + { .compatible = nvidia,tegra20-uart }, + { } +}; + +static int tegra_serial_ofdata_to_platdata(struct udevice *dev) +{ + struct ns16550_platdata *plat = dev_get_platdata(dev); + int ret; + + ret = ns16550_serial_ofdata_to_platdata(dev); + if (ret) + return ret; + plat-clock = V_NS16550_CLK; + + return 0; +} +U_BOOT_DRIVER(serial_ns16550) = { + .name = serial_tegra20, + .id = UCLASS_SERIAL, + .of_match = tegra_serial_ids, + .ofdata_to_platdata = tegra_serial_ofdata_to_platdata, + .platdata_auto_alloc_size = sizeof(struct ns16550_platdata), + .priv_auto_alloc_size = sizeof(struct NS16550), + .probe = ns16550_serial_probe, + .ops= ns16550_serial_ops, +}; diff --git a/include/configs/tegra-common.h b/include/configs/tegra-common.h index f1187f1..834b3d5 100644 --- a/include/configs/tegra-common.h +++ b/include/configs/tegra-common.h @@ -21,6 +21,9 @@ #define CONFIG_DM #define CONFIG_CMD_DM #define CONFIG_DM_GPIO +#ifndef CONFIG_SPL_BUILD +#define CONFIG_DM_SERIAL +#endif #define CONFIG_SYS_TIMER_RATE 100 #define CONFIG_SYS_TIMER_COUNTER NV_PA_TMRUS_BASE @@ -46,10 +49,14 @@ /* * NS16550 Configuration */ -#define CONFIG_SYS_NS16550 +#ifdef CONFIG_SPL_BUILD #define CONFIG_SYS_NS16550_SERIAL #define CONFIG_SYS_NS16550_REG_SIZE(-4) #define CONFIG_SYS_NS16550_CLK V_NS16550_CLK +#else +#define CONFIG_TEGRA_SERIAL +#endif +#define CONFIG_SYS_NS16550 /* * Common HW configuration. -- 2.1.0.rc2.206.gedb03e5 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v5 05/14] sandbox: Convert serial driver to use driver model
Adjust the sandbox serial driver to use the new driver model uclass. The driver works much as before, but within the new framework. Signed-off-by: Simon Glass s...@chromium.org --- Changes in v5: None Changes in v4: None Changes in v3: None Changes in v2: - Rename struct device to struct udevice drivers/serial/sandbox.c | 67 +-- include/configs/sandbox.h | 3 +++ 2 files changed, 39 insertions(+), 31 deletions(-) diff --git a/drivers/serial/sandbox.c b/drivers/serial/sandbox.c index 51fd871..ac54e01 100644 --- a/drivers/serial/sandbox.c +++ b/drivers/serial/sandbox.c @@ -11,12 +11,16 @@ */ #include common.h +#include dm.h +#include fdtdec.h #include lcd.h #include os.h #include serial.h #include linux/compiler.h #include asm/state.h +DECLARE_GLOBAL_DATA_PTR; + /* * * serial_buf: A buffer that holds keyboard characters for the @@ -30,27 +34,21 @@ static char serial_buf[16]; static unsigned int serial_buf_write; static unsigned int serial_buf_read; -static int sandbox_serial_init(void) +static int sandbox_serial_probe(struct udevice *dev) { struct sandbox_state *state = state_get_current(); if (state-term_raw != STATE_TERM_COOKED) os_tty_raw(0, state-term_raw == STATE_TERM_RAW_WITH_SIGS); - return 0; -} -static void sandbox_serial_setbrg(void) -{ + return 0; } -static void sandbox_serial_putc(const char ch) +static int sandbox_serial_putc(struct udevice *dev, const char ch) { os_write(1, ch, 1); -} -static void sandbox_serial_puts(const char *str) -{ - os_write(1, str, strlen(str)); + return 0; } static unsigned int increment_buffer_index(unsigned int index) @@ -58,12 +56,15 @@ static unsigned int increment_buffer_index(unsigned int index) return (index + 1) % ARRAY_SIZE(serial_buf); } -static int sandbox_serial_tstc(void) +static int sandbox_serial_pending(struct udevice *dev, bool input) { const unsigned int next_index = increment_buffer_index(serial_buf_write); ssize_t count; + if (!input) + return 0; + os_usleep(100); #ifdef CONFIG_LCD lcd_sync(); @@ -74,38 +75,42 @@ static int sandbox_serial_tstc(void) count = os_read_no_block(0, serial_buf[serial_buf_write], 1); if (count == 1) serial_buf_write = next_index; + return serial_buf_write != serial_buf_read; } -static int sandbox_serial_getc(void) +static int sandbox_serial_getc(struct udevice *dev) { int result; - while (!sandbox_serial_tstc()) - ; /* buffer empty */ + if (!sandbox_serial_pending(dev, true)) + return -EAGAIN; /* buffer empty */ result = serial_buf[serial_buf_read]; serial_buf_read = increment_buffer_index(serial_buf_read); return result; } -static struct serial_device sandbox_serial_drv = { - .name = sandbox_serial, - .start = sandbox_serial_init, - .stop = NULL, - .setbrg = sandbox_serial_setbrg, - .putc = sandbox_serial_putc, - .puts = sandbox_serial_puts, - .getc = sandbox_serial_getc, - .tstc = sandbox_serial_tstc, +static const struct dm_serial_ops sandbox_serial_ops = { + .putc = sandbox_serial_putc, + .pending = sandbox_serial_pending, + .getc = sandbox_serial_getc, }; -void sandbox_serial_initialize(void) -{ - serial_register(sandbox_serial_drv); -} +static const struct udevice_id sandbox_serial_ids[] = { + { .compatible = sandbox,serial }, + { } +}; -__weak struct serial_device *default_serial_console(void) -{ - return sandbox_serial_drv; -} +U_BOOT_DRIVER(serial_sandbox) = { + .name = serial_sandbox, + .id = UCLASS_SERIAL, + .of_match = sandbox_serial_ids, + .probe = sandbox_serial_probe, + .ops= sandbox_serial_ops, + .flags = DM_FLAG_PRE_RELOC, +}; + +U_BOOT_DEVICE(serial_sandbox_non_fdt) = { + .name = serial_sandbox, +}; diff --git a/include/configs/sandbox.h b/include/configs/sandbox.h index bf2d25c..f5fa4b3 100644 --- a/include/configs/sandbox.h +++ b/include/configs/sandbox.h @@ -31,6 +31,9 @@ #define CONFIG_DM_DEMO_SHAPE #define CONFIG_DM_GPIO #define CONFIG_DM_TEST +#define CONFIG_DM_SERIAL + +#define CONFIG_SYS_STDIO_DEREGISTER /* Number of bits in a C 'long' on this architecture */ #define CONFIG_SANDBOX_BITS_PER_LONG 64 -- 2.1.0.rc2.206.gedb03e5 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v2] patman: make run results better visible
On 4 September 2014 12:57, Doug Anderson diand...@chromium.org wrote: Vadim, On Thu, Sep 4, 2014 at 10:45 AM, Vadim Bendebury vben...@chromium.org wrote: For an occasional user of patman some failures are not obvious: for instance when checkpatch reports warnings, the dry run still reports that the email would be sent. If it is not dry run, the warnings are shown on the screen, but it is not clear that the email was not sent. Add some code to report failure to send email explicitly. Tested by running the script on a patch with style violations, observed error messages in the script output. Signed-off-by: Vadim Bendebury vben...@chromium.org --- Changes in v2: - modified the error message for accuracy tools/patman/patman.py | 7 ++- 1 file changed, 6 insertions(+), 1 deletion(-) Reviewed-by: Doug Anderson diand...@chromium.org Acked-by: Simon Glass s...@chromium.org ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] Force check of RSA-Signature
Hi, On 3 September 2014 09:12, Ulf Bartel ulf.bar...@scansonic.de wrote: Hello. We are currently testing U-Boot on a PPC. Beside booting the system we like to use it do some system updates (e.g. Kernel, FDT and Initrd). I've compiled U-Boot with support for AES and RSA-Signatures. We are storing the RSA public keys using a Fit-Image for U-Boot configuration on Flash. Basically both AES and RSA support works as expected, but: 1) is there a possibility to always be sure that accessing an image from a Fit-container checks the signature? If the signature is wrong, we get an error as expected. But if we generate an image without any signature (which may be generated by anybody) the access is of course possible. Currently I used something like fdt get value algorithm /images/script@1/signature@1/ algo test $algorithm = sha1,rsa2048 echo success to check if the image has a signature before proceeding. But this feels wrong. See the -r flag for mkimage. See also doc/uImage.FIT/beaglebone_vboot.txt which uses it. 2) Is there a possibility to check the signature/CRC before copying the image to ram with imxtract? I'm not sure of the specifics here - sometimes the image must be decompressed, etc. so in principle this is tricky to implement (but not impossible). Another option might be to zero it afterwards if the check fails? Regards, Simon ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] About verify uboot
Hi, On 21 July 2014 21:08, Duxiaoqiang duxiaoqi...@huawei.com wrote: Hi I try to make use of uboot's secure verify feature, but failed. My procedure is below: 1) Enable control device tree Ø Add CONFIG_OF_CONTROL / CONFIG_OF_SEPARATE to file vexpress_aemv8a.h 2) Enable FIT and verify boot Ø Add CONFIG_FIT/CONFIG_RSA/CONFIG_FIT_SIGNATURE to file vexpress_aemv8a.h 3) Create RSA key pair use openssl named dev 4) Create uboot.dts file as bellow /dts-v1/; / { model = Keys; compatible = denx, arm64 ; signature { key-dev { required = conf; algo = sha1,rsa2048; key-name-hint = dev; }; }; }; 5) Compile uboot.dtb file dtc -p 0x1000 .uboot.dts -O dtb -o work/uboot.dtb 6) Create kernel.its file as bellow /dts-v1/; / { description = Simple image with single Linux kernel and FDT blob; #address-cells = 1; images { kernel@1 { description = Linux kernel; data = /incbin/(./arch/arm/boot/zImage); type = kernel; arch = arm; os = linux; compression = none; load = 0x40008000; entry = 0x40008000; hash@1 { algo = sha1; }; }; fdt@1 { description = Flattened Device Tree blob; data = /incbin/(./arch/arm/boot/arm64.dtb); type = flat_dt; arch = arm; compression = none; hash@1 { algo = sha1; }; }; }; configurations { default = conf@1; conf@1 { description = Boot Linux kernel with FDT blob; kernel = kernel@1; fdt = fdt@1; signature@1 { algo = sha1,rsa2048; key-name-hint = dev ; }; }; }; }; 7) Sign the image Mkimage -D -I dts -O dtb -p 2000 -f kernel.its - K uboot.dtb -k keys -r rsa.img 8) Make uboot FDT Make vexpress_aem64a_config Make DEV_TREE_BIN = work/uboot.dtb And the Error is happened when build uboot FDT, error information is Please define CONFIG_DEFAULT_DEVICE_TREE or build with DEVICE_TREE= argument. My question is : Should I need to specify uboot.dts file when building FDT uboot I only just saw this email. Yes, device tree is required. Regards, Simon ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] Uboot - verified boot - CONFIG_OF_SEPARATE
Hi, On 11 March 2014 05:39, Thilo Cestonaro th...@cestona.ro wrote: Hey! When I build my Uboot with the CONFIG_OF_SEPARATE set to gain access to the compiled dtb, Uboot can't find my concatenated dtb during the boot. After injecting the pulbic keys for the verified boot, I cat the u-boot.dtb behind the u-boot.bin. After that I mkimage the u-boot.img as usuall. I found, that if I change the offset where the fdt_blob is searched for by +300, it finds the dtb correctly. Like this: --- #elif defined CONFIG_OF_SEPARATE /* FDT is at end of image */ - gd-fdt_blob = (void *)(_end_ofs + _TEXT_BASE); + gd-fdt_blob = (void *)(_end_ofs + _TEXT_BASE + 300); #endif --- But I can't explain why this might be. The 300 isn't a random value! I calculated it via some debug output and it works reliably. But like it is with these workarounds, I don't like them! So I'm searching for an answer. Any ideas, why the offset is not _end_ofs + _TEXT_BASE, like it should be? I just saw this now. You probably already know the outcome, but for the record, commit 8974292 added a check for this problem, and it was fixed for TI boards. Specifically for the Beaglebone, see doc/uImage.FIT/beaglebone_vboot.txt for a walk-through. Regards, Simon ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH] dfu, usb: set usb descriptor to values defined in dfu spec 1.1
On Thursday, September 04, 2014 at 12:21:40 PM, Heiko Schocher wrote: Hi Heiko, I'll just rant a bit, but please wait until Lukasz does a proper runthrough. set bDeviceClass, bDeviceSubClass and bcdUSB to the values defined in dfu spec 1.1 chapter 4.2.1 found here: http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf This URL gives me a website with: Resource not found. Please check the URL and try again. Signed-off-by: Heiko Schocher h...@denx.de Cc: Lukasz Majewski l.majew...@samsung.com Cc: Marek Vasut ma...@denx.de Cc: Roger Meier r.me...@siemens.com --- before this patch, dfu-util -l showed: Bus 002 Device 114: ID 0908:02c5 Siemens AG Device Descriptor: bLength18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass2 Communications bDeviceSubClass 2 Abstract (modem) bDeviceProtocol 0 None bMaxPacketSize064 idVendor 0x0908 Siemens AG idProduct 0x02c5 bcdDevice0.00 iManufacturer 1 Siemens AG with this patch: Bus 002 Device 089: ID 0908:02c5 Siemens AG Device Descriptor: bLength18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize064 idVendor 0x0908 Siemens AG idProduct 0x02c5 bcdDevice0.00 iManufacturer 1 Siemens AG iProduct2 USB download gadget which fits for bcdUSB, bDeviceClass and bDeviceSubClass with the DFU spezifikation. This patch doesn't seem fully right, let me explain below please. --- drivers/usb/gadget/f_dfu.c | 5 +++-- drivers/usb/gadget/g_dnl.c | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/usb/gadget/f_dfu.c b/drivers/usb/gadget/f_dfu.c index 9128add..9429e50 100644 --- a/drivers/usb/gadget/f_dfu.c +++ b/drivers/usb/gadget/f_dfu.c @@ -83,8 +83,9 @@ static struct usb_descriptor_header *dfu_runtime_descs[] = { static const struct usb_qualifier_descriptor dev_qualifier = { .bLength = sizeof dev_qualifier, .bDescriptorType = USB_DT_DEVICE_QUALIFIER, - .bcdUSB = __constant_cpu_to_le16(0x0200), - .bDeviceClass = USB_CLASS_VENDOR_SPEC, + .bcdUSB = __constant_cpu_to_le16(0x0110), See [1] and look for first and second instance of 'bcdUsb' there please. Quote of the second one: ' The bcdUSB field reports the highest version of USB the device supports. The value is in binary coded decimal with a format of 0xJJMN where JJ is the major version number, M is the minor version number and N is the sub minor version number. e.g. USB 2.0 is reported as 0x0200, USB 1.1 as 0x0110 and USB 1.0 as 0x0100. ' So this should be configured dynamically based on what the highest mode the controller supports is, no? + .bDeviceClass = USB_CLASS_PER_INTERFACE, This might be OK. + .bDeviceSubClass = 0x00, But this is not, the device definitelly isn't CDC-serial. [...] [1] http://www.beyondlogic.org/usbnutshell/usb5.shtml ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v2] kconfig: zynq: Add ZYBO board
On Mon, 1 Sep 2014 12:58:54 +0200 Michal Simek michal.si...@xilinx.com wrote: From: Peter Crosthwaite crosthwaitepe...@gmail.com Add a defconfig and Kconfigury for the Digilent ZYBO board. Signed-off-by: Peter Crosthwaite crosthwaite.pe...@gmail.com Signed-off-by: Michal Simek michal.si...@xilinx.com Acked-by: Jagannadha Sutradharudu Teki jaga...@xilinx.com --- Looks good to me. Reviewed-by: Masahiro Yamada yamad...@jp.panasonic.com Thanks! ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3 5/6] arm: debug: add Kconfig entries for lowlevel debug
Hi Simon, On Wed, 3 Sep 2014 18:01:44 -0600 Simon Glass s...@chromium.org wrote: Hi Masahiro, On 31 August 2014 20:06, Masahiro Yamada yamad...@jp.panasonic.com wrote: We have not had a good method to debug the early boot stage such as lowlevel_init function. I guess developers generally use dedicated debuggers for that, but it is difficult in some cases. (For example, my debugger cannot connect to the ARM processor when it is in the secure state. It sometimes happens when I need to debug the early boot stage on ARM SoCs with secure extension.) The low level debug feature in Linux would be also helpful for U-boot when we are stucking in nasty problems where the console is not available yet. You have to enable CONFIG_DEBUG_LL to use this feature. For now, only 8250-compatible UART devices are supported. You can add a header file under arch/arm/include/debug/ directory to support your UART device if necessary. Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com Is it possible to use the existing drivers for this? It seems unfortunate to duplicate the ns16550 driver (if that is what has happened). I am afraid it is difficult since the serial drivers are too complicated and written in C. Indeed, it is unfortunate, though. This low level debug framework only uses r0, r1, r2, r3 registers and does not need stack. I think it has an advantage over the serial drivers for debugging the lowlevel_init where no stack is ready. Best Regards Masahiro Yamada ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH] nand/denali: Adding Denali NAND driver support
Hi Chin, Are you planning to send v10 with the fixes suggested by Scott? Best Regards Masahiro Yamada On Tue, 2 Sep 2014 21:15:52 -0500 Scott Wood scottw...@freescale.com wrote: On Sat, 2014-08-30 at 07:45 -0400, Tom Rini wrote: On Thu, Aug 28, 2014 at 11:13:40AM +0900, Masahiro Yamada wrote: Hi Scott, On Tue, 19 Aug 2014 04:47:40 -0500 Chin Liang See cl...@altera.com wrote: To add the Denali NAND driver support into U-Boot. This driver is leveraged from Linux. Signed-off-by: Chin Liang See cl...@altera.com Cc: Scott Wood scottw...@freescale.com Cc: Masahiro Yamada yamad...@jp.panasonic.com --- Changes for v9 - Updated the commit messageb - Removed macro kern_xx - Removed debug macro - Changed CONFIG_NAND_DENALI_64BIT to CONFIG_SYS_NAND_DENALI_64BIT Any comments? If nothing, please apply this patch. I don't see anything obviously wrong here, but since Scott has reviewed previous versions I want to give him a little more time to ack. I'm OK pulling this into master with Scott's ack or lets say Wednesday next week and we'll ask Chin Liang to address any late feedback. Thanks all! I still don't see a reference to the SHA of the corresponding Linux driver. #define MODE5_WORKAROUND 0 still exists even though it's never used. I still see (void *) casts in memcpy -- v8 comments said removed but not all instances were removed. It still introduces CONFIG_SYS_NAND_DENALI_64BIT without documenting it. -scott ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH] dfu, usb: set usb descriptor to values defined in dfu spec 1.1
Hello Marek, Am 05.09.2014 00:42, schrieb Marek Vasut: On Thursday, September 04, 2014 at 12:21:40 PM, Heiko Schocher wrote: Hi Heiko, I'll just rant a bit, but please wait until Lukasz does a proper runthrough. set bDeviceClass, bDeviceSubClass and bcdUSB to the values defined in dfu spec 1.1 chapter 4.2.1 found here: http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf This URL gives me a website with: Resource not found. Please check the URL and try again. :-( Maybe it is deleted currently there? Hmm.. there is a search field if you open the above URL ... and if you type DFU and press search, you get: DFU File Format: PDF/Adobe Acrobat Aug 5, 2004 ... USB Device Firmware Upgrade Specification, Revision 1.1. 2. Intellectual Property Disclaimer. THIS SPECIFICATION IS PROVIDED “AS IS” ... www.usb.org/developers/devclass_docs/DFU_1.1.pdf This is exactly the above link ... This link is also referenced from openmoko: http://wiki.openmoko.org/wiki/USB_DFU_-_The_USB_Device_Firmware_Upgrade_standard Signed-off-by: Heiko Schocherh...@denx.de Cc: Lukasz Majewskil.majew...@samsung.com Cc: Marek Vasutma...@denx.de Cc: Roger Meierr.me...@siemens.com --- before this patch, dfu-util -l showed: Bus 002 Device 114: ID 0908:02c5 Siemens AG Device Descriptor: bLength18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass2 Communications bDeviceSubClass 2 Abstract (modem) bDeviceProtocol 0 None bMaxPacketSize064 idVendor 0x0908 Siemens AG idProduct 0x02c5 bcdDevice0.00 iManufacturer 1 Siemens AG with this patch: Bus 002 Device 089: ID 0908:02c5 Siemens AG Device Descriptor: bLength18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize064 idVendor 0x0908 Siemens AG idProduct 0x02c5 bcdDevice0.00 iManufacturer 1 Siemens AG iProduct2 USB download gadget which fits for bcdUSB, bDeviceClass and bDeviceSubClass with the DFU spezifikation. This patch doesn't seem fully right, let me explain below please. --- drivers/usb/gadget/f_dfu.c | 5 +++-- drivers/usb/gadget/g_dnl.c | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/usb/gadget/f_dfu.c b/drivers/usb/gadget/f_dfu.c index 9128add..9429e50 100644 --- a/drivers/usb/gadget/f_dfu.c +++ b/drivers/usb/gadget/f_dfu.c @@ -83,8 +83,9 @@ static struct usb_descriptor_header *dfu_runtime_descs[] = { static const struct usb_qualifier_descriptor dev_qualifier = { .bLength = sizeof dev_qualifier, .bDescriptorType = USB_DT_DEVICE_QUALIFIER, - .bcdUSB = __constant_cpu_to_le16(0x0200), - .bDeviceClass = USB_CLASS_VENDOR_SPEC, + .bcdUSB = __constant_cpu_to_le16(0x0110), See [1] and look for first and second instance of 'bcdUsb' there please. Quote of the second one: ' The bcdUSB field reports the highest version of USB the device supports. The value is in binary coded decimal with a format of 0xJJMN where JJ is the major version number, M is the minor version number and N is the sub minor version number. e.g. USB 2.0 is reported as 0x0200, USB 1.1 as 0x0110 and USB 1.0 as 0x0100. ' So this should be configured dynamically based on what the highest mode the controller supports is, no? Good question ... the DFU 1.1 spezification says in chapter 4.2.1 DFU Mode Device Descriptor: bcdUSB = 0100 USB specification release number in binary coded decimal. (which seems wrong, as the spez is version 1.1, see [2]) bDeviceClass = 0 bDeviceSubClass = 0 ... ? I discussed this change with Lukasz, see: [2] http://lists.denx.de/pipermail/u-boot/2014-August/186918.html + .bDeviceClass = USB_CLASS_PER_INTERFACE, This might be OK. + .bDeviceSubClass = 0x00, But this is not, the device definitelly isn't CDC-serial. [...] [1] http://www.beyondlogic.org/usbnutshell/usb5.shtml bye, Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] Force check of RSA-Signature
Dear Simon Ulf, In message CAPnjgZ2MH8W05zgHsHXN=etkei2hnnzkxk6kdrnet0rebgx...@mail.gmail.com you wrote: 2) Is there a possibility to check the signature/CRC before copying the image to ram with imxtract? I'm not sure of the specifics here - sometimes the image must be decompressed, etc. so in principle this is tricky to implement (but not impossible). Another option might be to zero it afterwards if the check fails? Maybe I misunderstand the question, but: in any case we have to read the image from a storage device into memory to be able to look at the data, which is obviously needed for computing a checksum or signature. 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: w...@denx.de All he had was nothing, but that was something, and now it had been taken away. - Terry Pratchett, _Sourcery_ ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v3 3/3] spi, sf: use offset and size in sf cmd from mtdpartition
with this patch, it is possible to get the offset and size information from the mtdpartiton setting in mtdparts, similiar to the nand commandos. = sf sf - SPI flash sub-system Usage: sf probe [[bus:]cs] [hz] [mode] - init flash device on given SPI bus and chip select sf read addr offset|partition len - read `len' bytes starting at `offset' to memory at `addr' sf write addr offset|partition len - write `len' bytes from memory at `addr' to flash at `offset' sf erase offset|partition [+]len- erase `len' bytes from `offset' `+len' round up `len' to block size sf update addr offset|partition len - erase and write `len' bytes from memory at `addr' to flash at `offset' = for example env is defined in mtdparts: = sf read 1300 env device 0 offset 0xd, size 0x1 SF: 65536 bytes @ 0xd Read: OK = Signed-off-by: Heiko Schocher h...@denx.de Cc: Jagannadha Sutradharudu Teki jagannadh.t...@gmail.com --- - changes for v2: none - changes for v3: rebase with d6c1ffc7d23f4fe4ae8c91101861055b8e1501b6 --- common/cmd_sf.c | 50 +- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/common/cmd_sf.c b/common/cmd_sf.c index 7653d7e..fc306ee 100644 --- a/common/cmd_sf.c +++ b/common/cmd_sf.c @@ -10,6 +10,8 @@ #include div64.h #include malloc.h #include spi_flash.h +#include jffs2/jffs2.h +#include linux/mtd/mtd.h #include asm/io.h @@ -244,23 +246,21 @@ static int spi_flash_update(struct spi_flash *flash, u32 offset, static int do_spi_flash_read_write(int argc, char * const argv[]) { unsigned long addr; - unsigned long offset; - unsigned long len; void *buf; char *endp; int ret = 1; + int dev = 0; + loff_t offset, len, maxsize; - if (argc 4) + if (argc 3) return -1; addr = simple_strtoul(argv[1], endp, 16); if (*argv[1] == 0 || *endp != 0) return -1; - offset = simple_strtoul(argv[2], endp, 16); - if (*argv[2] == 0 || *endp != 0) - return -1; - len = simple_strtoul(argv[3], endp, 16); - if (*argv[3] == 0 || *endp != 0) + + if (arg_off_size(argc - 2, argv[2], dev, offset, len, maxsize, + MTD_DEV_TYPE_NOR, flash-size)) return -1; /* Consistency checking */ @@ -299,31 +299,31 @@ static int do_spi_flash_read_write(int argc, char * const argv[]) static int do_spi_flash_erase(int argc, char * const argv[]) { - unsigned long offset; - unsigned long len; - char *endp; int ret; + int dev = 0; + loff_t offset, len, maxsize; + ulong size; if (argc 3) return -1; - offset = simple_strtoul(argv[1], endp, 16); - if (*argv[1] == 0 || *endp != 0) + if (arg_off(argv[1], dev, offset, len, maxsize, + MTD_DEV_TYPE_NOR, flash-size)) return -1; - ret = sf_parse_len_arg(argv[2], len); + ret = sf_parse_len_arg(argv[2], size); if (ret != 1) return -1; /* Consistency checking */ - if (offset + len flash-size) { + if (offset + size flash-size) { printf(ERROR: attempting %s past flash size (%#x)\n, argv[0], flash-size); return 1; } - ret = spi_flash_erase(flash, offset, len); - printf(SF: %zu bytes @ %#x Erased: %s\n, (size_t)len, (u32)offset, + ret = spi_flash_erase(flash, offset, size); + printf(SF: %zu bytes @ %#x Erased: %s\n, (size_t)size, (u32)offset, ret ? ERROR : OK); return ret == 0 ? 0 : 1; @@ -545,13 +545,13 @@ U_BOOT_CMD( SPI flash sub-system, probe [[bus:]cs] [hz] [mode] - init flash device on given SPI bus\n and chip select\n - sf read addr offset len- read `len' bytes starting at\n -`offset' to memory at `addr'\n - sf write addr offset len - write `len' bytes from memory\n -at `addr' to flash at `offset'\n - sf erase offset [+]len - erase `len' bytes from `offset'\n -`+len' round up `len' to block size\n - sf update addr offset len - erase and write `len' bytes from memory\n -at `addr' to flash at `offset' + sf read addr offset|partition len - read `len' bytes starting at\n +`offset' to memory at `addr'\n + sf write addr offset|partition len - write `len' bytes from memory\n +
[U-Boot] [PATCH v3 0/3] spi, sf: add mtdparts feature to spi and sf commands
This patchserie add the popssibility to define mtd partitions on spi nor flash, and use this settings with the sf commands. steps: - add MTD layer driver for spi, original patch from: http://git.denx.de/?p=u-boot/u-boot-mips.git;a=commitdiff;h=bb246819cdc90493dd7089eaa51b9e639765cced and addapted it to current mainline. - move common functions to get offset and size from cmdline nand command to extract offset and size from a mtd partition to common place drivers/mtd/mtd_uboot.c maybe another place is better? - add to the sf command the possibility to use offset and size from the settings in mtdparts With this patchset, the sf command looks now: = sf sf - SPI flash sub-system Usage: sf probe [[bus:]cs] [hz] [mode] - init flash device on given SPI bus and chip select sf read addr offset|partition len - read `len' bytes starting at `offset' to memory at `addr' sf write addr offset|partition len - write `len' bytes from memory at `addr' to flash at `offset' sf erase offset|partition [+]len- erase `len' bytes from `offset' `+len' round up `len' to block size sf update addr offset|partition len - erase and write `len' bytes from memory at `addr' to flash at `offset' = for example env is defined in mtdparts: = sf read 1300 env device 0 offset 0xd, size 0x1 SF: 65536 bytes @ 0xd Read: OK = There are the followings checkpatch warnings: CHECK: Alignment should match open parenthesis #153: FILE: common/cmd_nand.c:217: + if (arg_off(argv[2], idx, addr, maxsize, maxsize, + MTD_DEV_TYPE_NAND, nand_info[idx].size)) { CHECK: Alignment should match open parenthesis #179: FILE: common/cmd_nand.c:557: + if (arg_off(argv[3], dev, off, size, maxsize, + MTD_DEV_TYPE_NAND, nand_info[dev].size)) CHECK: Alignment should match open parenthesis #193: FILE: common/cmd_nand.c:576: + if (arg_off_size(argc - 3, argv + 3, dev, off, size, + maxsize, MTD_DEV_TYPE_NAND, total: 0 errors, 0 warnings, 3 checks, 361 lines checked NOTE: Ignored message types: COMPLEX_MACRO CONSIDER_KSTRTO MINMAX MULTISTATEMENT_MACRO_USE_DO_WHILE NETWORKING_BLOCK_COMMENT_STYLE USLEEP_RANGE 20140714_ml_mtdparts/0002-mtd-nand-move-common-functions-from-cmd_nand.c-to-co.patch has style problems, please review. I see not, why this warning pops up ... - changes for v2: - mtd-spi-add-MTD-layer-driver.patch - add comment from Daniel Schwierzeck: fix compile error from original patch with static inline rather than static __maybe_unused - changes for v3: - rebase with d6c1ffc7d23f4fe4ae8c91101861055b8e1501b6 - add comments from scott wood: - align MTD_DEV_TYPE_NAND correct - remove unnecessary inline - rework jffs2 header problem later Cc: Scott Wood scottw...@freescale.com Cc: Tom Rini tr...@ti.com Cc: Daniel Schwierzeck daniel.schwierz...@gmail.com Cc: Jagannadha Sutradharudu Teki jagannadh.t...@gmail.com Daniel Schwierzeck (1): mtd, spi: add MTD layer driver Heiko Schocher (2): mtd, nand: move common functions from cmd_nand.c to common place spi, sf: use offset and size in sf cmd from mtdpartition README| 3 + common/cmd_nand.c | 140 -- common/cmd_onenand.c | 19 ++ common/cmd_sf.c | 59 +- drivers/mtd/Makefile | 4 +- drivers/mtd/mtd_uboot.c | 114 ++ drivers/mtd/spi/Makefile | 1 + drivers/mtd/spi/sf_internal.h | 13 drivers/mtd/spi/sf_mtd.c | 104 +++ drivers/mtd/spi/sf_probe.c| 5 ++ include/linux/mtd/mtd.h | 7 +++ 11 files changed, 310 insertions(+), 159 deletions(-) create mode 100644 drivers/mtd/mtd_uboot.c create mode 100644 drivers/mtd/spi/sf_mtd.c -- 1.8.3.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v3 1/3] mtd, spi: add MTD layer driver
From: Daniel Schwierzeck daniel.schwierz...@gmail.com add MTD layer driver for spi, original patch from: http://git.denx.de/?p=u-boot/u-boot-mips.git;a=commitdiff;h=bb246819cdc90493dd7089eaa51b9e639765cced changes from Heiko Schocher against this patch: - remove compile error if not defining CONFIG_SPI_FLASH_MTD: LD drivers/mtd/spi/built-in.o drivers/mtd/spi/sf_probe.o: In function `spi_flash_mtd_unregister': /home/hs/abb/imx6/u-boot/drivers/mtd/spi/sf_internal.h:168: multiple definition of `spi_flash_mtd_unregister' drivers/mtd/spi/sf_params.o:/home/hs/abb/imx6/u-boot/drivers/mtd/spi/sf_internal.h:168: first defined here drivers/mtd/spi/sf_ops.o: In function `spi_flash_mtd_unregister': /home/hs/abb/imx6/u-boot/drivers/mtd/spi/sf_internal.h:168: multiple definition of `spi_flash_mtd_unregister' drivers/mtd/spi/sf_params.o:/home/hs/abb/imx6/u-boot/drivers/mtd/spi/sf_internal.h:168: first defined here make[1]: *** [drivers/mtd/spi/built-in.o] Fehler 1 make: *** [drivers/mtd/spi] Fehler 2 - add a README entry. - add correct writebufsize, to fit with Linux v3.14 MTD, UBI/UBIFS sync. Signed-off-by: Daniel Schwierzeck daniel.schwierz...@gmail.com Signed-off-by: Heiko Schocher h...@denx.de Cc: Jagannadha Sutradharudu Teki jagannadh.t...@gmail.com --- MAKEALL for ar, mips, powerc compiles clean - changes for v2: - add comment from Daniel Schwierzeck: fix compile error from original patch with static inline rather than static __maybe_unused - changes for v3: rebase with d6c1ffc7d23f4fe4ae8c91101861055b8e1501b6 --- README| 3 ++ common/cmd_sf.c | 9 ++-- drivers/mtd/spi/Makefile | 1 + drivers/mtd/spi/sf_internal.h | 13 ++ drivers/mtd/spi/sf_mtd.c | 104 ++ drivers/mtd/spi/sf_probe.c| 5 ++ 6 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 drivers/mtd/spi/sf_mtd.c diff --git a/README b/README index 0a0f528..e7be54e 100644 --- a/README +++ b/README @@ -2965,6 +2965,9 @@ CBFS (Coreboot Filesystem) support operation will not execute. The only way to exit this hardware-protected mode is to drive W#/VPP HIGH. + CONFIG_SPI_FLASH_MTD + add MTD translation layer driver. + - SystemACE Support: CONFIG_SYSTEMACE diff --git a/common/cmd_sf.c b/common/cmd_sf.c index b4ceb71..7653d7e 100644 --- a/common/cmd_sf.c +++ b/common/cmd_sf.c @@ -121,16 +121,17 @@ static int do_spi_flash_probe(int argc, char * const argv[]) return -1; } + if (flash) + spi_flash_free(flash); + new = spi_flash_probe(bus, cs, speed, mode); + flash = new; + if (!new) { printf(Failed to initialize SPI flash at %u:%u\n, bus, cs); return 1; } - if (flash) - spi_flash_free(flash); - flash = new; - return 0; } diff --git a/drivers/mtd/spi/Makefile b/drivers/mtd/spi/Makefile index 9e18fb4..b15d273 100644 --- a/drivers/mtd/spi/Makefile +++ b/drivers/mtd/spi/Makefile @@ -12,6 +12,7 @@ endif obj-$(CONFIG_CMD_SF) += sf.o obj-$(CONFIG_SPI_FLASH) += sf_params.o sf_probe.o sf_ops.o +obj-$(CONFIG_SPI_FLASH_MTD) += sf_mtd.o obj-$(CONFIG_SPI_FRAM_RAMTRON) += ramtron.o obj-$(CONFIG_SPI_FLASH_SANDBOX) += sandbox.o obj-$(CONFIG_SPI_M95XXX) += eeprom_m95xxx.o diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h index 19d4914..a9f97d1 100644 --- a/drivers/mtd/spi/sf_internal.h +++ b/drivers/mtd/spi/sf_internal.h @@ -160,4 +160,17 @@ int spi_flash_read_common(struct spi_flash *flash, const u8 *cmd, int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset, size_t len, void *data); +#ifdef CONFIG_SPI_FLASH_MTD +int spi_flash_mtd_register(struct spi_flash *flash); +void spi_flash_mtd_unregister(void); +#else +static inline int spi_flash_mtd_register(struct spi_flash *flash) +{ + return 0; +} +static inline void spi_flash_mtd_unregister(void) +{ +} +#endif + #endif /* _SF_INTERNAL_H_ */ diff --git a/drivers/mtd/spi/sf_mtd.c b/drivers/mtd/spi/sf_mtd.c new file mode 100644 index 000..0b9cb62 --- /dev/null +++ b/drivers/mtd/spi/sf_mtd.c @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2012-2014 Daniel Schwierzeck, daniel.schwierz...@gmail.com + * + * SPDX-License-Identifier:GPL-2.0+ + */ + +#include common.h +#include malloc.h +#include asm/errno.h +#include linux/mtd/mtd.h +#include spi_flash.h + +static struct mtd_info sf_mtd_info; +static char sf_mtd_name[8]; + +static int spi_flash_mtd_erase(struct mtd_info *mtd, struct erase_info *instr) +{ + struct spi_flash *flash = mtd-priv; + int err; + + instr-state = MTD_ERASING; + + err = spi_flash_erase(flash, instr-addr, instr-len); + if (err) { + instr-state = MTD_ERASE_FAILED; + instr-fail_addr = MTD_FAIL_ADDR_UNKNOWN; +
[U-Boot] [PATCH v3 2/3] mtd, nand: move common functions from cmd_nand.c to common place
move common functions from cmd_nand.c (for calculating offset and size from cmdline paramter) to common place, so they could used from other commands which use mtd partitions. For onenand the arg_off_size() is left in common/cmd_onenand.c. It should use now the common arg_off() function, but as I could not test onenand I let it there ... Signed-off-by: Heiko Schocher h...@denx.de Cc: Scott Wood scottw...@freescale.com Cc: Tom Rini tr...@ti.com --- - changes for v2: none - changes for v3: - add comments from scott wood: - align MTD_DEV_TYPE_NAND correct - remove unnecessary inline - rework jffs2 header problem later - rebase with d6c1ffc7d23f4fe4ae8c91101861055b8e1501b6 --- common/cmd_nand.c | 140 +--- common/cmd_onenand.c| 19 +++ drivers/mtd/Makefile| 4 +- drivers/mtd/mtd_uboot.c | 114 +++ include/linux/mtd/mtd.h | 7 +++ 5 files changed, 154 insertions(+), 130 deletions(-) create mode 100644 drivers/mtd/mtd_uboot.c diff --git a/common/cmd_nand.c b/common/cmd_nand.c index f9ced9d..099ba00 100644 --- a/common/cmd_nand.c +++ b/common/cmd_nand.c @@ -133,115 +133,6 @@ static int set_dev(int dev) return 0; } -static inline int str2off(const char *p, loff_t *num) -{ - char *endptr; - - *num = simple_strtoull(p, endptr, 16); - return *p != '\0' *endptr == '\0'; -} - -static inline int str2long(const char *p, ulong *num) -{ - char *endptr; - - *num = simple_strtoul(p, endptr, 16); - return *p != '\0' *endptr == '\0'; -} - -static int get_part(const char *partname, int *idx, loff_t *off, loff_t *size, - loff_t *maxsize) -{ -#ifdef CONFIG_CMD_MTDPARTS - struct mtd_device *dev; - struct part_info *part; - u8 pnum; - int ret; - - ret = mtdparts_init(); - if (ret) - return ret; - - ret = find_dev_and_part(partname, dev, pnum, part); - if (ret) - return ret; - - if (dev-id-type != MTD_DEV_TYPE_NAND) { - puts(not a NAND device\n); - return -1; - } - - *off = part-offset; - *size = part-size; - *maxsize = part-size; - *idx = dev-id-num; - - ret = set_dev(*idx); - if (ret) - return ret; - - return 0; -#else - puts(offset is not a number\n); - return -1; -#endif -} - -static int arg_off(const char *arg, int *idx, loff_t *off, loff_t *size, - loff_t *maxsize) -{ - if (!str2off(arg, off)) - return get_part(arg, idx, off, size, maxsize); - - if (*off = nand_info[*idx].size) { - puts(Offset exceeds device limit\n); - return -1; - } - - *maxsize = nand_info[*idx].size - *off; - *size = *maxsize; - return 0; -} - -static int arg_off_size(int argc, char *const argv[], int *idx, - loff_t *off, loff_t *size, loff_t *maxsize) -{ - int ret; - - if (argc == 0) { - *off = 0; - *size = nand_info[*idx].size; - *maxsize = *size; - goto print; - } - - ret = arg_off(argv[0], idx, off, size, maxsize); - if (ret) - return ret; - - if (argc == 1) - goto print; - - if (!str2off(argv[1], size)) { - printf('%s' is not a number\n, argv[1]); - return -1; - } - - if (*size *maxsize) { - puts(Size exceeds partition or device limit\n); - return -1; - } - -print: - printf(device %d , *idx); - if (*size == nand_info[*idx].size) - puts(whole chip\n); - else - printf(offset 0x%llx, size 0x%llx\n, - (unsigned long long)*off, (unsigned long long)*size); - return 0; -} - #ifdef CONFIG_CMD_NAND_LOCK_UNLOCK static void print_status(ulong start, ulong end, ulong erasesize, int status) { @@ -322,7 +213,12 @@ int do_nand_env_oob(cmd_tbl_t *cmdtp, int argc, char *const argv[]) goto usage; /* We don't care about size, or maxsize. */ - if (arg_off(argv[2], idx, addr, maxsize, maxsize)) { + if (arg_off(argv[2], idx, addr, maxsize, maxsize, + MTD_DEV_TYPE_NAND, nand_info[idx].size)) { + puts(Offset or partition name expected\n); + return 1; + } + if (set_dev(idx)) { puts(Offset or partition name expected\n); return 1; } @@ -592,7 +488,10 @@ static int do_nand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) printf(\nNAND %s: , cmd); /* skip first two or three arguments, look for offset and size */ if
[U-Boot] [PATCH v4 1/6] nand: denali: add Denali NAND driver for SPL
The SPL-mode driver for Denali(Cadence) NAND Flash Memory Controller IP. This driver requires two CONFIG macros: - CONFIG_SPL_NAND_DENALI Define to enable this driver. - CONFIG_SYS_NAND_BAD_BLOCK_POS Specify bad block mark position in the oob space. Typically 0. Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com Cc: Chin Liang See cl...@altera.com Cc: Scott Wood scottw...@freescale.com --- Changes in v4: - Add a workaround to not depend on the Denali driver posted by Chin Liang See. This driver has been taking too long: http://patchwork.ozlabs.org/patch/381305/ Changes in v3: None Changes in v2: - Avoid unaligned access - Replace a magic number 0x2000 with PIPELINE_ACCESS drivers/mtd/nand/Makefile | 1 + drivers/mtd/nand/denali_spl.c | 245 ++ 2 files changed, 246 insertions(+) create mode 100644 drivers/mtd/nand/denali_spl.c diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile index bf1312a..f90f9a0 100644 --- a/drivers/mtd/nand/Makefile +++ b/drivers/mtd/nand/Makefile @@ -12,6 +12,7 @@ NORMAL_DRIVERS=y endif obj-$(CONFIG_SPL_NAND_AM33XX_BCH) += am335x_spl_bch.o +obj-$(CONFIG_SPL_NAND_DENALI) += denali_spl.o obj-$(CONFIG_SPL_NAND_DOCG4) += docg4_spl.o obj-$(CONFIG_SPL_NAND_SIMPLE) += nand_spl_simple.o obj-$(CONFIG_SPL_NAND_LOAD) += nand_spl_load.o diff --git a/drivers/mtd/nand/denali_spl.c b/drivers/mtd/nand/denali_spl.c new file mode 100644 index 000..ab23743 --- /dev/null +++ b/drivers/mtd/nand/denali_spl.c @@ -0,0 +1,245 @@ +/* + * Copyright (C) 2014 Panasonic Corporation + * + * SPDX-License-Identifier:GPL-2.0+ + */ + +#include common.h +#include asm/io.h +#include asm/unaligned.h +#include linux/mtd/nand.h +#if 0 +#include denali.h +#else +/* workaround until denali.h is merged */ +#define TRANSFER_SPARE_REG 0x10 +#define ECC_ENABLE 0xe0 +#define PAGES_PER_BLOCK0x150 +#define DEVICE_MAIN_AREA_SIZE 0x170 +#define DEVICE_SPARE_AREA_SIZE 0x180 + +#define INTR_STATUS(__bank)(0x410 + ((__bank) * 0x50)) +#define INTR_STATUS__ECC_UNCOR_ERR 0x0001 +#define INTR_STATUS__LOAD_COMP 0x0040 + +#define INDEX_CTRL_REG0x0 +#define INDEX_DATA_REG0x10 +#define MODE_010x0400 +#define MODE_100x0800 +#endif + +#define SPARE_ACCESS 0x41 +#define MAIN_ACCESS0x42 +#define PIPELINE_ACCESS0x2000 + +#define BANK(x) ((x) 24) + +static void __iomem *denali_flash_mem = + (void __iomem *)CONFIG_SYS_NAND_DATA_BASE; +static void __iomem *denali_flash_reg = + (void __iomem *)CONFIG_SYS_NAND_REGS_BASE; + +static const int flash_bank; +static uint8_t page_buffer[NAND_MAX_PAGESIZE]; +static int page_size, oob_size, pages_per_block; + +static void index_addr(uint32_t address, uint32_t data) +{ + writel(address, denali_flash_mem + INDEX_CTRL_REG); + writel(data, denali_flash_mem + INDEX_DATA_REG); +} + +static int wait_for_irq(uint32_t irq_mask) +{ + unsigned long timeout = 100; + uint32_t intr_status; + + do { + intr_status = readl(denali_flash_reg + INTR_STATUS(flash_bank)); + + if (intr_status INTR_STATUS__ECC_UNCOR_ERR) { + debug(Uncorrected ECC detected\n); + return -EIO; + } + + if (intr_status irq_mask) + break; + + udelay(1); + timeout--; + } while (timeout); + + if (!timeout) { + debug(Timeout with interrupt status %08x\n, intr_status); + return -EIO; + } + + return 0; +} + +static void read_data_from_flash_mem(uint8_t *buf, int len) +{ + int i; + uint32_t *buf32; + + /* transfer the data from the flash */ + buf32 = (uint32_t *)buf; + + /* +* Let's take care of unaligned access although it rarely happens. +* Avoid put_unaligned() for the normal use cases since it leads to +* a bit performance regression. +*/ + if ((unsigned long)buf32 % 4) { + for (i = 0; i len / 4; i++) + put_unaligned(readl(denali_flash_mem + INDEX_DATA_REG), + buf32++); + } else { + for (i = 0; i len / 4; i++) + *buf32++ = readl(denali_flash_mem + INDEX_DATA_REG); + } + + if (len % 4) { + u32 tmp; + + tmp = cpu_to_le32(readl(denali_flash_mem + INDEX_DATA_REG)); + buf = (uint8_t *)buf32; + for (i = 0; i len % 4; i++) { + *buf++ = tmp; + tmp = 8; + } + } +} + +int denali_send_pipeline_cmd(int page, int ecc_en, int access_type) +{ +
[U-Boot] [PATCH v4 2/6] serial: add UniPhier serial driver
The driver for on-chip UART used on Panasonic UniPhier platform. Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com --- Changes in v4: None Changes in v3: None Changes in v2: - Use const unsigned int mode_x_div = 16 instead of #define MODE_X_DIV 16 - Use DIV_ROUND_CLOSEST() macro to compute the divisor drivers/serial/Makefile | 1 + drivers/serial/serial.c | 2 + drivers/serial/serial_uniphier.c | 204 +++ 3 files changed, 207 insertions(+) create mode 100644 drivers/serial/serial_uniphier.c diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile index 571c18f..385b2f9 100644 --- a/drivers/serial/Makefile +++ b/drivers/serial/Makefile @@ -34,6 +34,7 @@ obj-$(CONFIG_BFIN_SERIAL) += serial_bfin.o obj-$(CONFIG_FSL_LPUART) += serial_lpuart.o obj-$(CONFIG_MXS_AUART) += mxs_auart.o obj-$(CONFIG_ARC_SERIAL) += serial_arc.o +obj-$(CONFIG_UNIPHIER_SERIAL) += serial_uniphier.o ifndef CONFIG_SPL_BUILD obj-$(CONFIG_USB_TTY) += usbtty.o diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c index d2eb752..d32673e 100644 --- a/drivers/serial/serial.c +++ b/drivers/serial/serial.c @@ -157,6 +157,7 @@ serial_initfunc(sh_serial_initialize); serial_initfunc(arm_dcc_initialize); serial_initfunc(mxs_auart_initialize); serial_initfunc(arc_serial_initialize); +serial_initfunc(uniphier_serial_initialize); /** * serial_register() - Register serial driver with serial driver core @@ -250,6 +251,7 @@ void serial_initialize(void) arm_dcc_initialize(); mxs_auart_initialize(); arc_serial_initialize(); + uniphier_serial_initialize(); serial_assign(default_serial_console()-name); } diff --git a/drivers/serial/serial_uniphier.c b/drivers/serial/serial_uniphier.c new file mode 100644 index 000..f8c9d92 --- /dev/null +++ b/drivers/serial/serial_uniphier.c @@ -0,0 +1,204 @@ +/* + * Copyright (C) 2012-2014 Panasonic Corporation + * Author: Masahiro Yamada yamad...@jp.panasonic.com + * + * Based on serial_ns16550.c + * (C) Copyright 2000 + * Rob Taylor, Flying Pig Systems. r...@flyingpig.com. + * + * SPDX-License-Identifier:GPL-2.0+ + */ + +#include common.h +#include serial.h + +#define UART_REG(x)\ + u8 x; \ + u8 postpad_##x[3]; + +/* + * Note: Register map is slightly different from that of 16550. + */ +struct uniphier_serial { + UART_REG(rbr); /* 0x00 */ + UART_REG(ier); /* 0x04 */ + UART_REG(iir); /* 0x08 */ + UART_REG(fcr); /* 0x0c */ + u8 mcr; /* 0x10 */ + u8 lcr; + u16 __postpad; + UART_REG(lsr); /* 0x14 */ + UART_REG(msr); /* 0x18 */ + u32 __none1; + u32 __none2; + u16 dlr; + u16 __postpad2; +}; + +#define thr rbr + +/* + * These are the definitions for the Line Control Register + */ +#define UART_LCR_WLS_8 0x03/* 8 bit character length */ + +/* + * These are the definitions for the Line Status Register + */ +#define UART_LSR_DR0x01/* Data ready */ +#define UART_LSR_THRE 0x20/* Xmit holding register empty */ + +DECLARE_GLOBAL_DATA_PTR; + +static void uniphier_serial_init(struct uniphier_serial *port) +{ + const unsigned int mode_x_div = 16; + unsigned int divisor; + + writeb(UART_LCR_WLS_8, port-lcr); + + divisor = DIV_ROUND_CLOSEST(CONFIG_SYS_UNIPHIER_UART_CLK, + mode_x_div * gd-baudrate); + + writew(divisor, port-dlr); +} + +static void uniphier_serial_setbrg(struct uniphier_serial *port) +{ + uniphier_serial_init(port); +} + +static int uniphier_serial_tstc(struct uniphier_serial *port) +{ + return (readb(port-lsr) UART_LSR_DR) != 0; +} + +static int uniphier_serial_getc(struct uniphier_serial *port) +{ + while (!uniphier_serial_tstc(port)) + ; + + return readb(port-rbr); +} + +static void uniphier_serial_putc(struct uniphier_serial *port, const char c) +{ + if (c == '\n') + uniphier_serial_putc(port, '\r'); + + while (!(readb(port-lsr) UART_LSR_THRE)) + ; + + writeb(c, port-thr); +} + +static struct uniphier_serial *serial_ports[4] = { +#ifdef CONFIG_SYS_UNIPHIER_SERIAL_BASE0 + (struct uniphier_serial *)CONFIG_SYS_UNIPHIER_SERIAL_BASE0, +#else + NULL, +#endif +#ifdef CONFIG_SYS_UNIPHIER_SERIAL_BASE1 + (struct uniphier_serial *)CONFIG_SYS_UNIPHIER_SERIAL_BASE1, +#else + NULL, +#endif +#ifdef CONFIG_SYS_UNIPHIER_SERIAL_BASE2 + (struct uniphier_serial *)CONFIG_SYS_UNIPHIER_SERIAL_BASE2, +#else + NULL, +#endif +#ifdef CONFIG_SYS_UNIPHIER_SERIAL_BASE3 + (struct uniphier_serial *)CONFIG_SYS_UNIPHIER_SERIAL_BASE3, +#else + NULL, +#endif +}; + +/* Multi serial device functions */ +#define
[U-Boot] [PATCH v4 4/6] arm: uniphier: add Kconfig and defconfig
Add entries for Panasonic UniPhier family: PH1-LD4, PH1-Pro4, PH1-sLD8 Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com --- Changes in v4: None Changes in v3: - Rebase on the current u-boot/master Changes in v2: - Rebase on the current u-boot/master arch/arm/Kconfig| 5 + arch/arm/cpu/armv7/uniphier/Kconfig | 32 configs/ph1_ld4_defconfig | 4 configs/ph1_pro4_defconfig | 4 configs/ph1_sld8_defconfig | 4 5 files changed, 49 insertions(+) create mode 100644 arch/arm/cpu/armv7/uniphier/Kconfig create mode 100644 configs/ph1_ld4_defconfig create mode 100644 configs/ph1_pro4_defconfig create mode 100644 configs/ph1_sld8_defconfig diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 22f0f09..9a35639 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -509,6 +509,9 @@ config TARGET_COLIBRI_PXA270 config TARGET_JORNADA bool Support jornada +config ARCH_UNIPHIER + bool Panasonic UniPhier platform + endchoice source arch/arm/cpu/arm926ejs/davinci/Kconfig @@ -535,6 +538,8 @@ source arch/arm/cpu/armv7/rmobile/Kconfig source arch/arm/cpu/armv7/tegra-common/Kconfig +source arch/arm/cpu/armv7/uniphier/Kconfig + source arch/arm/cpu/arm926ejs/versatile/Kconfig source arch/arm/cpu/armv7/zynq/Kconfig diff --git a/arch/arm/cpu/armv7/uniphier/Kconfig b/arch/arm/cpu/armv7/uniphier/Kconfig new file mode 100644 index 000..34f5496 --- /dev/null +++ b/arch/arm/cpu/armv7/uniphier/Kconfig @@ -0,0 +1,32 @@ +menu Panasonic UniPhier platform + depends on ARCH_UNIPHIER + +config SYS_CPU + string + default armv7 + +config SYS_SOC + string + default uniphier + +config SYS_CONFIG_NAME + string + default ph1_pro4 if MACH_PH1_PRO4 + default ph1_ld4 if MACH_PH1_LD4 + default ph1_sld8 if MACH_PH1_SLD8 + +choice + prompt UniPhier SoC select + +config MACH_PH1_PRO4 + bool PH1-Pro4 + +config MACH_PH1_LD4 + bool PH1-LD4 + +config MACH_PH1_SLD8 + bool PH1-sLD8 + +endchoice + +endmenu diff --git a/configs/ph1_ld4_defconfig b/configs/ph1_ld4_defconfig new file mode 100644 index 000..d6fcb25 --- /dev/null +++ b/configs/ph1_ld4_defconfig @@ -0,0 +1,4 @@ +CONFIG_SPL=y ++S:CONFIG_ARM=y ++S:CONFIG_ARCH_UNIPHIER=y ++S:CONFIG_MACH_PH1_LD4=y diff --git a/configs/ph1_pro4_defconfig b/configs/ph1_pro4_defconfig new file mode 100644 index 000..557b3aa --- /dev/null +++ b/configs/ph1_pro4_defconfig @@ -0,0 +1,4 @@ +CONFIG_SPL=y ++S:CONFIG_ARM=y ++S:CONFIG_ARCH_UNIPHIER=y ++S:CONFIG_MACH_PH1_PRO4=y diff --git a/configs/ph1_sld8_defconfig b/configs/ph1_sld8_defconfig new file mode 100644 index 000..8028d12 --- /dev/null +++ b/configs/ph1_sld8_defconfig @@ -0,0 +1,4 @@ +CONFIG_SPL=y ++S:CONFIG_ARM=y ++S:CONFIG_ARCH_UNIPHIER=y ++S:CONFIG_MACH_PH1_SLD8=y -- 1.9.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v4 5/6] MAINTAINERS: add me as a maintainer of UniPhier platform
Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com --- Changes in v4: None Changes in v3: None Changes in v2: - Newly added MAINTAINERS | 8 1 file changed, 8 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index af194ca..cb5b3f0 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -149,6 +149,14 @@ F: arch/arm/include/asm/arch-davinci/ F: arch/arm/include/asm/arch-omap*/ F: arch/arm/include/asm/ti-common/ +ARM UNIPHIER +M: Masahiro Yamada yamad...@jp.panasonic.com +S: Maintained +F: arch/arm/cpu/armv7/uniphier/ +F: arch/arm/include/asm/arch-uniphier/ +F: configs/ph1_*_defconfig +F: drivers/serial/serial_uniphier.c + ARM ZYNQ M: Michal Simek mon...@monstr.eu S: Maintained -- 1.9.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v4 6/6] git-mailrc: add me as a maintainer of UniPhier platform
Signed-off-by: Masahiro Yamada yamad...@jp.panasonic.com --- Changes in v4: None Changes in v3: None Changes in v2: - Rebase doc/git-mailrc | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/git-mailrc b/doc/git-mailrc index 0fba100..35f2eb2 100644 --- a/doc/git-mailrc +++ b/doc/git-mailrc @@ -63,6 +63,7 @@ alias sunxi uboot, ijc, jwrdegoede alias tegra uboot, sjg, Tom Warren twar...@nvidia.com, Stephen Warren swar...@nvidia.com alias tegra2 tegra alias ti uboot, trini +alias uniphier uboot, masahiro alias zynq uboot, monstr alias avr32 uboot, abiessmann -- 1.9.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot