From 69790f010bd818aa8765e4aea4bd63ccf4aea026 Mon Sep 17 00:00:00 2001 From: Pavel Boldin Date: Thu, 17 Oct 2013 20:58:44 +0400 Subject: [PATCH] RT #89962 EA-LPC4357: SPIFI support, eNVM fix --- Makefile | 10 ++-- board/nxp/ea-lpc4357/board.c | 43 +++++++++------- common/env_spifi.c | 19 +++++++ cpu/arm_cortexm3/cmd_cptf.c | 9 ++-- cpu/arm_cortexm3/lpc18xx/envm-lpc43xx.c | 41 +++++++-------- cpu/arm_cortexm3/lpc18xx/spifi.c | 11 ++++ .../lpc18xx/spifilib/spifi_drv_M4.lib | Bin 0 -> 37946 bytes .../{spifilib.lds => spifilib-dram.lds} | 0 .../lpc18xx/spifilib/spifilib-envm.lds | 47 ++++++++++++++++++ cpu/arm_cortexm3/lpc18xx/spifilib/spifilib.h | 7 ++- cpu/arm_cortexm3/lpc18xx/spifilib/spifilib.mk | 18 +++++-- include/asm-arm/arch-lpc18xx/lpc18xx_emc.h | 2 +- include/asm-arm/arch-lpc18xx/lpc18xx_gpio.h | 5 ++ include/configs/ea-lpc4357.h | 17 ++++--- include/spifi.h | 4 ++ 15 files changed, 175 insertions(+), 58 deletions(-) create mode 100644 cpu/arm_cortexm3/lpc18xx/spifilib/spifi_drv_M4.lib rename cpu/arm_cortexm3/lpc18xx/spifilib/{spifilib.lds => spifilib-dram.lds} (100%) create mode 100644 cpu/arm_cortexm3/lpc18xx/spifilib/spifilib-envm.lds diff --git a/Makefile b/Makefile index 36fd9a3..ad8c684 100644 --- a/Makefile +++ b/Makefile @@ -309,9 +309,13 @@ $(obj)u-boot.srec: $(obj)u-boot $(OBJCOPY) -O srec $< $@ ifeq ($(CONFIG_SYS_LPC18XX)$(CONFIG_SPIFI),yy) -SPIFILIB_DEP = cpu/arm_cortexm3/lpc18xx/spifilib/spifilib.bin +ifeq ($(CONFIG_SPIFILIB_IN_ENVM),y) +SPIFILIB_DEP = cpu/arm_cortexm3/lpc18xx/spifilib/spifilib-envm.bin +else +SPIFILIB_DEP = cpu/arm_cortexm3/lpc18xx/spifilib/spifilib-dram.bin +endif $(SPIFILIB_DEP): depend - $(MAKE) -C cpu/arm_cortexm3/lpc18xx/spifilib -f spifilib.mk + $(MAKE) -C cpu/arm_cortexm3/lpc18xx/spifilib $(notdir $(SPIFILIB_DEP)) -f spifilib.mk endif $(obj)u-boot.bin: $(obj)u-boot $(SPIFILIB_DEP) @@ -325,7 +329,7 @@ ifeq ($(CONFIG_LPC18XX_BOOTHEADER),y) mv $(obj)u-boot-bootheader.bin $(obj)u-boot.bin endif ifeq ($(CONFIG_SYS_LPC18XX)$(CONFIG_SPIFI),yy) - dd if=cpu/arm_cortexm3/lpc18xx/spifilib/spifilib.bin of=u-boot.bin seek=112 bs=1024 + dd if=$(SPIFILIB_DEP) of=u-boot.bin seek=112 bs=1024 endif $(obj)u-boot.upgrade: $(obj)u-boot.bin diff --git a/board/nxp/ea-lpc4357/board.c b/board/nxp/ea-lpc4357/board.c index e5ec9c6..d2b49b9 100644 --- a/board/nxp/ea-lpc4357/board.c +++ b/board/nxp/ea-lpc4357/board.c @@ -49,7 +49,7 @@ /* Active to read/write delay (RAS latency) */ #define SDRAM_RAS 3 /* From EA example */ /* CAS latency (CL) */ -#define SDRAM_CAS 3 /* CL = 2 */ +#define SDRAM_CAS 3 /* CL = 3 */ /* Command delayed strategy, using EMCCLKDELAY */ #define SDRAM_RDCFG_RD 1 /* Precharge command period (tRP) */ @@ -82,7 +82,7 @@ * Indicates the multiple of 16 CCLKs between SDRAM refresh cycles. */ /* (64ms / 4096 row) */ -#define SDRAM_REFRESH (NS2CLK(64000000 / 4096) / 16) +#define SDRAM_REFRESH ((NS2CLK(64000000 / 4096) / 16) - 1) /* Only for initialization */ #define SDRAM_REFRESH_FAST 2 @@ -124,9 +124,9 @@ /* * See IS42S32800D mode register (IS42S32800D datasheet, page 23), * and EA example code. - * CAS3, Burst Length = 8. + * CAS3, Burst Length = 4. */ -#define SDRAM_MODEREG_BL 3 /* Burst Length code */ +#define SDRAM_MODEREG_BL 2 /* Burst Length code */ #define SDRAM_MODEREG_CAS 3 /* CAS Latency */ #define SDRAM_MODEREG_VALUE \ @@ -137,7 +137,6 @@ * SDRAM chip-specific options */ /* - * FIXME * Offset of the 12 least-significant bits of mode register (A0..A11) * in addresses on the AHB bus. * @@ -175,7 +174,7 @@ DECLARE_GLOBAL_DATA_PTR; /* - * Pin configuration table for Hitex LPC4350 Eval. + * Pin configuration table for EA LPC4357 OEM. * * This table does not list all MCU pins that will be configured. See also * the code in `iomux_init()`. @@ -389,6 +388,22 @@ static const struct lpc18xx_pin_config ea_lpc4357_iomux[] = { /* P1.5 = CS0# - NOR */ {{0x1, 5}, LPC18XX_IOMUX_EMC_CONFIG(3)}, #endif /* CONFIG_SYS_FLASH_CS */ + +#if defined(CONFIG_SPIFI) + /* P3.3 = SPIFI_SCK */ + {{0x3, 3}, LPC18XX_IOMUX_EMC_CONFIG(3)}, + /* P3.4 = SPIFI_SIO3 */ + {{0x3, 4}, LPC18XX_IOMUX_SPIFI_CONFIG(3)}, + /* P3.5 = SPIFI_SIO2 */ + {{0x3, 5}, LPC18XX_IOMUX_SPIFI_CONFIG(3)}, + /* P3.6 = SPIFI_MISO */ + {{0x3, 6}, LPC18XX_IOMUX_SPIFI_CONFIG(3)}, + /* P3.6 = SPIFI_MOSI */ + {{0x3, 7}, LPC18XX_IOMUX_SPIFI_CONFIG(3)}, + /* P3.6 = SPIFI_CS */ + {{0x3, 8}, LPC18XX_IOMUX_CONFIG(3, 0, 1, 0, 0, 0)}, +#endif + }; /* @@ -578,8 +593,6 @@ void __attribute__((section(".lpc18xx_image_top_text"))) */ int board_init(void) { - volatile struct lpc_emc_st_regs *st; - /* * Set SDRAM clock output delay to ~3.5ns (0x7777), * the SDRAM chip does not work otherwise. @@ -611,10 +624,6 @@ int board_init(void) st->ta = CONFIG_SYS_FLASH_TA; #endif -#if defined(CONFIG_LPC_SPI) - spi_init(); -#endif - return 0; } @@ -644,8 +653,6 @@ int misc_init_r(void) } #endif /* CONFIG_MISC_INIT_R */ -#define mdelay(n) ({unsigned long msec=(n); while (msec--) udelay(1000);}) - /* * Setup external RAM. */ @@ -681,10 +688,10 @@ int dram_init(void) dy->rascas = (SDRAM_RAS << LPC_EMC_DYRASCAS_RAS_BITS) | (SDRAM_CAS << LPC_EMC_DYRASCAS_CAS_BITS); + LPC_EMC->dy_rdcfg = (SDRAM_RDCFG_RD << LPC_EMC_DYRDCFG_RD_BITS); - LPC_EMC->dy_trp = SDRAM_T_RP; LPC_EMC->dy_tras = SDRAM_T_RAS; LPC_EMC->dy_srex = SDRAM_T_SREX; @@ -696,7 +703,7 @@ int dram_init(void) LPC_EMC->dy_xsr = SDRAM_T_XSR; LPC_EMC->dy_rrd = SDRAM_T_RRD; LPC_EMC->dy_mrd = SDRAM_T_MRD; - mdelay(100); + udelay(100); /* * Issue SDRAM NOP (no operation) command @@ -704,7 +711,7 @@ int dram_init(void) LPC_EMC->dy_ctrl = LPC_EMC_DYCTRL_CE_MSK | LPC_EMC_DYCTRL_CS_MSK | (LPC_EMC_DYCTRL_I_NOP << LPC_EMC_DYCTRL_I_BITS); - mdelay(200); + udelay(200); /* * Pre-charge all with fast refresh @@ -713,7 +720,7 @@ int dram_init(void) LPC_EMC_DYCTRL_CE_MSK | LPC_EMC_DYCTRL_CS_MSK | (LPC_EMC_DYCTRL_I_PALL << LPC_EMC_DYCTRL_I_BITS); LPC_EMC->dy_rfsh = SDRAM_REFRESH_FAST; - mdelay(200); + udelay(200); /* * Set refresh period diff --git a/common/env_spifi.c b/common/env_spifi.c index ba1b2f4..6696f9c 100644 --- a/common/env_spifi.c +++ b/common/env_spifi.c @@ -63,9 +63,26 @@ int saveenv(void) */ int env_init(void) { +#ifndef CONFIG_SPIFILIB_IN_ENVM + /* SPIFI lib is not accessible before DRAM initialization */ + gd->env_addr = (ulong)&default_environment[0]; + gd->env_valid = 0; + return 0; +#else ulong crc, len, new; unsigned off; uchar buf[64]; + + if (spifi_initialize()) { + /* + * SPIFI initalization failed + */ + gd->env_addr = (ulong)&default_environment[0]; + gd->env_valid = 0; + + goto out; + } + if (gd->env_valid == 0){ /* read old CRC */ memcpy((char *)&crc, (char *)CONFIG_ENV_ADDR + offsetof(env_t, crc), @@ -89,5 +106,7 @@ int env_init(void) } } +out: return (0); +#endif /* CONFIG_SPIFILIB_IN_ENVM */ } diff --git a/cpu/arm_cortexm3/cmd_cptf.c b/cpu/arm_cortexm3/cmd_cptf.c index e2fcc58..eb9fd09 100644 --- a/cpu/arm_cortexm3/cmd_cptf.c +++ b/cpu/arm_cortexm3/cmd_cptf.c @@ -57,8 +57,8 @@ int /* * Copy the buffer to the destination. */ - if (envm_write((uint) dst, (void *) src, (uint) size) != size) { - ret = -1; + ret = envm_write((uint) dst, (void *) src, (uint) size); + if (ret != size) { goto Done; } @@ -119,8 +119,9 @@ int do_cptf(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) /* * Copy the buffer to the destination. */ - if (envm_write_and_reset(dst, src, size, do_reset)) { - printf("%s: nvm_write_and_reset failed\n", (char *) argv[0]); + if ((ret = envm_write_and_reset(dst, src, size, do_reset)) <= 0) { + printf("%s: envm_write_and_reset failed: %d\n", + (char *) argv[0], ret); goto Done; } diff --git a/cpu/arm_cortexm3/lpc18xx/envm-lpc43xx.c b/cpu/arm_cortexm3/lpc18xx/envm-lpc43xx.c index 69e0964..94b3a9b 100644 --- a/cpu/arm_cortexm3/lpc18xx/envm-lpc43xx.c +++ b/cpu/arm_cortexm3/lpc18xx/envm-lpc43xx.c @@ -24,6 +24,16 @@ #include #include "envm.h" + +/* + * Convinience macro for selecting value for bank. + */ +#ifdef CONFIG_MEM_NVM2_BASE +# define CONFIG_NVM_VALUE(bank, VALUE) (bank ? CONFIG_MEM_NVM2_##VALUE : CONFIG_MEM_NVM_##VALUE) +#else +# define CONFIG_NVM_VALUE(bank, VALUE) (CONFIG_MEM_NVM_##VALUE) +#endif + /* * IAP library for editing eNVM */ @@ -197,11 +207,7 @@ void envm_init(void) static u32 __attribute__((section(".ramcode"))) __attribute__((long_call)) find_sector(u32 addr, u32 bank) { - u32 i, j, current = CONFIG_MEM_NVM_BASE, sector = 0; - -#ifdef CONFIG_MEM_NVM2_BASE - current = bank ? CONFIG_MEM_NVM2_BASE : CONFIG_MEM_NVM_BASE; -#endif + u32 i, j, current = CONFIG_NVM_VALUE(bank, BASE), sector = 0; for (i = 0; flash_layout[i].sectors; i++) { @@ -236,11 +242,7 @@ lpc43xn_flash_erase(u32 offset, u32 size, u32 bank) last = find_sector(offset + size - 1, bank); if (first < 0 || last < first || - last >= -#ifdef CONFIG_MEM_NVM2_BASE - bank ? CONFIG_MEM_NVM2_SECTORS : -#endif - CONFIG_MEM_NVM_SECTORS) { + last >= CONFIG_NVM_VALUE(bank, SECTORS)) { rv = -EINVAL; goto out; } @@ -306,11 +308,7 @@ lpc43xn_flash_program(u32 dest_addr, u8 *src, u32 size) /* * Write range should not exceed the end of FLASH */ - if (size > -#ifdef CONFIG_MEM_NVM2_LEN - bank ? CONFIG_MEM_NVM2_LEN : -#endif - CONFIG_MEM_NVM_LEN) { + if (size > CONFIG_NVM_VALUE(bank, LEN)) { rv = -EINVAL; goto out; } @@ -382,7 +380,7 @@ u32 __attribute__((section(".ramcode"))) __attribute__((long_call)) envm_write(u32 offset, void *buf, u32 size) { - u32 rv = 0, bank = 0; + int rv = 0, bank = 0; /* * Clock in is CPU in KHz @@ -410,10 +408,13 @@ envm_write(u32 offset, void *buf, u32 size) bank = CONFIG_MEM_NVM2_BASE <= offset; #endif - if (lpc43xn_flash_erase(offset, size, bank) < 0 || - lpc43xn_flash_program(offset, buf, - (size + IAP_BLOCK_MASK) & - ~IAP_BLOCK_MASK) < 0) + rv = lpc43xn_flash_erase(offset, size, bank); + if (rv < 0) + goto out; + + rv = lpc43xn_flash_program(offset, buf, + (size + IAP_BLOCK_MASK) & ~IAP_BLOCK_MASK); + if (rv < 0) goto out; rv = size; diff --git a/cpu/arm_cortexm3/lpc18xx/spifi.c b/cpu/arm_cortexm3/lpc18xx/spifi.c index a2dfbae..e07f7d5 100644 --- a/cpu/arm_cortexm3/lpc18xx/spifi.c +++ b/cpu/arm_cortexm3/lpc18xx/spifi.c @@ -2,6 +2,7 @@ * (C) Copyright 2013 * * Dmitry Konyshev, Emcraft Systems, probables@emcraft.com + * Pavel Boldin, Emcraft Systems, paboldin@emcraft.com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -30,9 +31,19 @@ int spifi_initialize(void) int ret; if (spifilib_flash_hdr->signature == SPIFILIB_SIG) { + /* + * Already initalized, skip + */ + if (spifilib_ram_hdr != NULL) + return 0; + +#ifndef CONFIG_SPIFILIB_IN_ENVM spifilib_ram_hdr = spifilib_flash_hdr->link_addr; memcpy(spifilib_flash_hdr->link_addr, spifilib_flash_hdr, spifilib_flash_hdr->lib_size); +#else + spifilib_ram_hdr = spifilib_flash_hdr; +#endif if ((ret = spifilib_ram_hdr->init_func(&spifi_obj, 10, S_MODE3, 25))) { spifilib_ram_hdr = NULL; printf("SPIFI lib init failed with code %i\n", ret); diff --git a/cpu/arm_cortexm3/lpc18xx/spifilib/spifi_drv_M4.lib b/cpu/arm_cortexm3/lpc18xx/spifilib/spifi_drv_M4.lib new file mode 100644 index 0000000000000000000000000000000000000000..9b6cfdbdd0b2390df9f3938f923be072b01aac4e GIT binary patch literal 37946 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 aTZznMPf{<$k8%Zh_?saEIynN!RAM + + /DISCARD/ : + { + *(*) + } +} diff --git a/cpu/arm_cortexm3/lpc18xx/spifilib/spifilib.h b/cpu/arm_cortexm3/lpc18xx/spifilib/spifilib.h index 8fafd04..28eebf5 100644 --- a/cpu/arm_cortexm3/lpc18xx/spifilib/spifilib.h +++ b/cpu/arm_cortexm3/lpc18xx/spifilib/spifilib.h @@ -23,11 +23,16 @@ #define __SPIFILIB_H #include "spifi_rom_api.h" +#include #define SPIFILIB_SIG 0x591F121B #define SPIFILIB_SIZE (16*1024) -#define SPIFI_BASE_ADDR 0x14000000 +#ifdef CONFIG_SPIFILIB_IN_ENVM +# define SPIFI_BASE_ADDR CONFIG_MEM_NVM_BASE +#else +# define SPIFI_BASE_ADDR 0x14000000 +#endif typedef int32_t (*spifi_init_t)(SPIFIobj *obj, uint32_t csHigh, uint32_t options, uint32_t mhz); typedef int32_t (*spifi_program_t)(SPIFIobj *obj, char *source, SPIFIopers *opers); diff --git a/cpu/arm_cortexm3/lpc18xx/spifilib/spifilib.mk b/cpu/arm_cortexm3/lpc18xx/spifilib/spifilib.mk index 4767749..c85c3ca 100644 --- a/cpu/arm_cortexm3/lpc18xx/spifilib/spifilib.mk +++ b/cpu/arm_cortexm3/lpc18xx/spifilib/spifilib.mk @@ -17,14 +17,24 @@ # MA 02111-1307 USA # -spifilib.bin: spifilib +# This should be done with .incbin and Position-Independent-Code + +SPIFILIB_VERSION ?= M3 + +spifilib-envm.bin: spifilib-envm $(OBJCOPY) -O binary $< $@ -spifilib: spifilib.o spifi_drv_M3.lib spifilib.lds - $(LD) $(LDLAGS) -Map spifilib.map -Tspifilib.lds -nostdlib -o $@ spifilib.o spifi_drv_M3.lib +spifilib-dram.bin: spifilib-dram + $(OBJCOPY) -O binary $< $@ + +spifilib-envm: spifilib.o spifi_drv_$(SPIFILIB_VERSION).lib spifilib-envm.lds + $(LD) $(LDLAGS) -Map spifilib.map -Tspifilib-envm.lds -nostdlib -o $@ spifilib.o spifi_drv_$(SPIFILIB_VERSION).lib + +spifilib-dram: spifilib.o spifi_drv_$(SPIFILIB_VERSION).lib spifilib-dram.lds + $(LD) $(LDLAGS) -Map spifilib.map -Tspifilib-dram.lds -nostdlib -o $@ spifilib.o spifi_drv_$(SPIFILIB_VERSION).lib spifilib.o: spifilib.h spifilib.c $(CC) $(CFLAGS) -fshort-wchar -fshort-enums -c $+ clean: - $(RM) spifilib.o spifilib spifilib.bin + $(RM) spifilib.o spifilib-envm spifilib-dram spifilib-envm.bin spifilib-dram.bin diff --git a/include/asm-arm/arch-lpc18xx/lpc18xx_emc.h b/include/asm-arm/arch-lpc18xx/lpc18xx_emc.h index 934c500..35b3430 100644 --- a/include/asm-arm/arch-lpc18xx/lpc18xx_emc.h +++ b/include/asm-arm/arch-lpc18xx/lpc18xx_emc.h @@ -115,7 +115,7 @@ struct lpc_emc_regs { //#define NS2CLK(time) (((LPC18XX_EMC_CLK_OUT / 1000000) * (time)) / 1000) static inline uint32_t NS2CLK(uint32_t time){ uint32_t tmp = LPC18XX_EMC_CLK_OUT/1000000; - return (tmp * time) / 1000; + return (tmp * time + 999) / 1000; } diff --git a/include/asm-arm/arch-lpc18xx/lpc18xx_gpio.h b/include/asm-arm/arch-lpc18xx/lpc18xx_gpio.h index 4af7241..7c13e34 100644 --- a/include/asm-arm/arch-lpc18xx/lpc18xx_gpio.h +++ b/include/asm-arm/arch-lpc18xx/lpc18xx_gpio.h @@ -64,6 +64,11 @@ */ #define LPC18XX_IOMUX_EMC_CONFIG(func) \ (LPC18XX_IOMUX_CONFIG(func, 0, 1, 1, 1, 1)) +/* + * Pin settings for slow EMC pins (SPIFI) + */ +#define LPC18XX_IOMUX_SPIFI_CONFIG(func) \ + (LPC18XX_IOMUX_CONFIG(func, 0, 1, 0, 1, 1)) /* * Pin settings for GPIO input pins */ diff --git a/include/configs/ea-lpc4357.h b/include/configs/ea-lpc4357.h index 92f9a70..8f0e28c 100644 --- a/include/configs/ea-lpc4357.h +++ b/include/configs/ea-lpc4357.h @@ -172,10 +172,12 @@ */ #define CONFIG_LPC18XX_EMC_HALFCPU +/* #define CONFIG_ENV_IS_NOWHERE #define CONFIG_ENV_SIZE (4 * 1024) #define CONFIG_ENV_ADDR 0 +*/ /* Uncomment the following line to disable Flash support */ #define CONFIG_SYS_NO_FLASH @@ -183,7 +185,7 @@ /* * Configuration of the external Flash memory */ -#define CONFIG_SYS_FLASH_CS 0 +#define CONFIG_SYS_FLASH_CS 1 #define CONFIG_SYS_FLASH_CFG 0x81 /* 16 bit, Byte Lane enabled */ #define CONFIG_SYS_FLASH_WE (1 - 1) /* Minimum is enough */ #define CONFIG_SYS_FLASH_OE 0 /* Minimum is enough */ @@ -213,17 +215,18 @@ /* Uncomment the following line to enable the SPIFI interface */ -/*#define CONFIG_SPIFI*/ +#define CONFIG_SPIFI #ifdef CONFIG_SPIFI #define CONFIG_SPIFI_BASE 0x14000000 -#define CONFIG_SPIFI_SIZE (16*1024*1024) +#define CONFIG_SPIFI_SIZE (2*1024*1024) + +#define CONFIG_SPIFILIB_IN_ENVM /* Place SPIFI lib into ENVM */ -#ifndef CONFIG_ENV_IS_IN_FLASH +#if !defined(CONFIG_ENV_IS_IN_FLASH) && !defined(CONFIG_ENV_IS_NOWHERE) #define CONFIG_ENV_IS_IN_SPIFI #define CONFIG_ENV_SIZE (4 * 1024) -#define CONFIG_ENV_ADDR \ - (CONFIG_SPIFI_BASE + 128 * 1024) +#define CONFIG_ENV_ADDR CONFIG_SPIFI_BASE #define CONFIG_ENV_OVERWRITE 1 #endif #endif @@ -369,7 +372,7 @@ #define CONFIG_EXTRA_ENV_SETTINGS \ "loadaddr=0x28000000\0" \ "addip=setenv bootargs ${bootargs} ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}:eth0:off\0" \ - "flashaddr=1C040000\0" \ + "flashaddr=0x14001000\0" \ "flashboot=run addip;bootm ${flashaddr}\0" \ "ethaddr=C0:B1:3C:88:78:93\0" \ "ipaddr=172.17.4.215\0" \ diff --git a/include/spifi.h b/include/spifi.h index 92e9bfa..666f050 100644 --- a/include/spifi.h +++ b/include/spifi.h @@ -32,4 +32,8 @@ extern int spifi_initialize(void); extern int spifi_write(ulong off, const void *buf, ulong size); extern void spifi_cancel_mem_mode(void); +#if defined(CONFIG_ENV_IS_IN_SPIFI) && !defined(CONFIG_SPIFILIB_IN_ENVM) +# error "Keeping environment in SPIFI requires it to reside in eNVM or IRAM, not in DRAM" +#endif + #endif -- GitLab