From d7b4731efd4d4d90224917fca1a09ccf99cd1baa Mon Sep 17 00:00:00 2001 From: Chris Packham Date: Mon, 22 Aug 2016 12:38:39 +1200 Subject: arm: mvebu: Add support for NAND interface on A-38x The NAND interface on the Armada-38x series is similar to that on the Armada-XP. The key difference is that the NAND ECC clock ratio is provided via the DFX Server registers instead of the Core Clock. Signed-off-by: Chris Packham Cc: Luka Perkov Cc: Dirk Eibach Signed-off-by: Stefan Roese diff --git a/arch/arm/mach-mvebu/cpu.c b/arch/arm/mach-mvebu/cpu.c index fd66f59..5eb2a39 100644 --- a/arch/arm/mach-mvebu/cpu.c +++ b/arch/arm/mach-mvebu/cpu.c @@ -452,8 +452,15 @@ int arch_cpu_init(void) u32 mvebu_get_nand_clock(void) { + u32 reg; + + if (mvebu_soc_family() == MVEBU_SOC_A38X) + reg = MVEBU_DFX_DIV_CLK_CTRL(1); + else + reg = MVEBU_CORE_DIV_CLK_CTRL(1); + return CONFIG_SYS_MVEBU_PLL_CLOCK / - ((readl(MVEBU_CORE_DIV_CLK_CTRL(1)) & + ((readl(reg) & NAND_ECC_DIVCKL_RATIO_MASK) >> NAND_ECC_DIVCKL_RATIO_OFFS); } diff --git a/arch/arm/mach-mvebu/include/mach/soc.h b/arch/arm/mach-mvebu/include/mach/soc.h index 13c9f29..6342cdc 100644 --- a/arch/arm/mach-mvebu/include/mach/soc.h +++ b/arch/arm/mach-mvebu/include/mach/soc.h @@ -73,6 +73,7 @@ #define MVEBU_NAND_BASE (MVEBU_REGISTER(0xd0000)) #define MVEBU_SDIO_BASE (MVEBU_REGISTER(0xd8000)) #define MVEBU_LCD_BASE (MVEBU_REGISTER(0xe0000)) +#define MVEBU_DFX_BASE (MVEBU_REGISTER(0xe4000)) #define SOC_COHERENCY_FABRIC_CTRL_REG (MVEBU_REGISTER(0x20200)) #define MBUS_ERR_PROP_EN (1 << 8) @@ -92,6 +93,7 @@ #define SPI_PUP_EN BIT(5) #define MVEBU_CORE_DIV_CLK_CTRL(i) (MVEBU_CLOCK_BASE + ((i) * 0x8)) +#define MVEBU_DFX_DIV_CLK_CTRL(i) (MVEBU_DFX_BASE + 0x250 + ((i) * 0x4)) #define NAND_ECC_DIVCKL_RATIO_OFFS 8 #define NAND_ECC_DIVCKL_RATIO_MASK (0x3F << NAND_ECC_DIVCKL_RATIO_OFFS) -- cgit v0.10.2 From 148f00e7a7f6bf28cf38c61a25056e1f2c465166 Mon Sep 17 00:00:00 2001 From: Chris Packham Date: Mon, 22 Aug 2016 17:17:29 +1200 Subject: spl: Remove unused CONFIG_SPL_SPI_* definitions As of commit 88e34e5 ("spl: replace CONFIG_SPL_SPI_* with CONFIG_SF_DEFAULT_*") these defines are not used. Remove them to avoid confusion. Signed-off-by: Chris Packham Signed-off-by: Stefan Roese diff --git a/include/configs/clearfog.h b/include/configs/clearfog.h index ffaeedb..6cbdee2 100644 --- a/include/configs/clearfog.h +++ b/include/configs/clearfog.h @@ -133,8 +133,6 @@ #define CONFIG_SPL_SPI_SUPPORT #define CONFIG_SPL_SPI_FLASH_SUPPORT #define CONFIG_SPL_SPI_LOAD -#define CONFIG_SPL_SPI_BUS 0 -#define CONFIG_SPL_SPI_CS 0 #define CONFIG_SYS_SPI_U_BOOT_OFFS 0x20000 #define CONFIG_SYS_U_BOOT_OFFS CONFIG_SYS_SPI_U_BOOT_OFFS #endif diff --git a/include/configs/db-88f6720.h b/include/configs/db-88f6720.h index 01c7895..4e00812 100644 --- a/include/configs/db-88f6720.h +++ b/include/configs/db-88f6720.h @@ -100,8 +100,6 @@ #define CONFIG_SPL_SPI_SUPPORT #define CONFIG_SPL_SPI_FLASH_SUPPORT #define CONFIG_SPL_SPI_LOAD -#define CONFIG_SPL_SPI_BUS 0 -#define CONFIG_SPL_SPI_CS 0 #define CONFIG_SYS_SPI_U_BOOT_OFFS 0x20000 #define CONFIG_SYS_U_BOOT_OFFS CONFIG_SYS_SPI_U_BOOT_OFFS diff --git a/include/configs/db-88f6820-gp.h b/include/configs/db-88f6820-gp.h index 3539a62..88614b3 100644 --- a/include/configs/db-88f6820-gp.h +++ b/include/configs/db-88f6820-gp.h @@ -134,8 +134,6 @@ #define CONFIG_SPL_SPI_SUPPORT #define CONFIG_SPL_SPI_FLASH_SUPPORT #define CONFIG_SPL_SPI_LOAD -#define CONFIG_SPL_SPI_BUS 0 -#define CONFIG_SPL_SPI_CS 0 #define CONFIG_SYS_SPI_U_BOOT_OFFS 0x24000 #define CONFIG_SYS_U_BOOT_OFFS CONFIG_SYS_SPI_U_BOOT_OFFS #endif diff --git a/include/configs/db-mv784mp-gp.h b/include/configs/db-mv784mp-gp.h index d6acbbc..5cdfd1c 100644 --- a/include/configs/db-mv784mp-gp.h +++ b/include/configs/db-mv784mp-gp.h @@ -125,8 +125,6 @@ #define CONFIG_SPL_SPI_SUPPORT #define CONFIG_SPL_SPI_FLASH_SUPPORT #define CONFIG_SPL_SPI_LOAD -#define CONFIG_SPL_SPI_BUS 0 -#define CONFIG_SPL_SPI_CS 0 #define CONFIG_SYS_SPI_U_BOOT_OFFS 0x20000 #define CONFIG_SYS_U_BOOT_OFFS CONFIG_SYS_SPI_U_BOOT_OFFS diff --git a/include/configs/ds414.h b/include/configs/ds414.h index 23373cd..ff188e2 100644 --- a/include/configs/ds414.h +++ b/include/configs/ds414.h @@ -132,8 +132,6 @@ #define CONFIG_SPL_SPI_SUPPORT #define CONFIG_SPL_SPI_FLASH_SUPPORT #define CONFIG_SPL_SPI_LOAD -#define CONFIG_SPL_SPI_BUS 0 -#define CONFIG_SPL_SPI_CS 0 #define CONFIG_SYS_SPI_U_BOOT_OFFS 0x24000 /* DS414 bus width is 32bits */ diff --git a/include/configs/maxbcm.h b/include/configs/maxbcm.h index fed310f..47d2948 100644 --- a/include/configs/maxbcm.h +++ b/include/configs/maxbcm.h @@ -93,8 +93,6 @@ #define CONFIG_SPL_SPI_SUPPORT #define CONFIG_SPL_SPI_FLASH_SUPPORT #define CONFIG_SPL_SPI_LOAD -#define CONFIG_SPL_SPI_BUS 0 -#define CONFIG_SPL_SPI_CS 0 #define CONFIG_SYS_SPI_U_BOOT_OFFS 0x20000 /* Enable DDR support in SPL (DDR3 training from Marvell bin_hdr) */ diff --git a/include/configs/theadorable.h b/include/configs/theadorable.h index 1caa858..8bbf879 100644 --- a/include/configs/theadorable.h +++ b/include/configs/theadorable.h @@ -158,8 +158,6 @@ #define CONFIG_SPL_SPI_SUPPORT #define CONFIG_SPL_SPI_FLASH_SUPPORT #define CONFIG_SPL_SPI_LOAD -#define CONFIG_SPL_SPI_BUS 0 -#define CONFIG_SPL_SPI_CS 0 #define CONFIG_SYS_SPI_U_BOOT_OFFS 0x1a000 #define CONFIG_SYS_U_BOOT_OFFS CONFIG_SYS_SPI_U_BOOT_OFFS -- cgit v0.10.2 From 014a357bbae82fd243fa11aca6df0bf438445cf0 Mon Sep 17 00:00:00 2001 From: Chris Packham Date: Mon, 22 Aug 2016 20:52:49 +1200 Subject: arm: mvebu: a38x: update serdes error handling Ensure appropriate error messages are generated. Previously all errors indicated that the serdes was already in use. Now appropriate error messages are given. Signed-off-by: Chris Packham Signed-off-by: Stefan Roese diff --git a/arch/arm/mach-mvebu/serdes/a38x/high_speed_env_spec.c b/arch/arm/mach-mvebu/serdes/a38x/high_speed_env_spec.c index 7d67199..820219e 100644 --- a/arch/arm/mach-mvebu/serdes/a38x/high_speed_env_spec.c +++ b/arch/arm/mach-mvebu/serdes/a38x/high_speed_env_spec.c @@ -835,25 +835,26 @@ u32 hws_serdes_topology_verify(enum serdes_type serdes_type, u32 serdes_id, } } else { test_result = SERDES_ALREADY_IN_USE; - if (test_result == SERDES_ALREADY_IN_USE) { - printf("%s: Error: serdes lane %d is configured to type %s: type already in use\n", - __func__, serdes_id, - serdes_type_to_string[serdes_type]); - return MV_FAIL; - } else if (test_result == WRONG_NUMBER_OF_UNITS) { - printf("%s: Warning: serdes lane %d is set to type %s.\n", - __func__, serdes_id, - serdes_type_to_string[serdes_type]); - printf("%s: Maximum supported lanes are already set to this type (limit = %d)\n", - __func__, serd_max_num); - return MV_FAIL; - } else if (test_result == UNIT_NUMBER_VIOLATION) { - printf("%s: Warning: serdes lane %d type is %s: current device support only %d units of this type.\n", - __func__, serdes_id, - serdes_type_to_string[serdes_type], - serd_max_num); - return MV_FAIL; - } + } + + if (test_result == SERDES_ALREADY_IN_USE) { + printf("%s: Error: serdes lane %d is configured to type %s: type already in use\n", + __func__, serdes_id, + serdes_type_to_string[serdes_type]); + return MV_FAIL; + } else if (test_result == WRONG_NUMBER_OF_UNITS) { + printf("%s: Warning: serdes lane %d is set to type %s.\n", + __func__, serdes_id, + serdes_type_to_string[serdes_type]); + printf("%s: Maximum supported lanes are already set to this type (limit = %d)\n", + __func__, serd_max_num); + return MV_FAIL; + } else if (test_result == UNIT_NUMBER_VIOLATION) { + printf("%s: Warning: serdes lane %d type is %s: current device support only %d units of this type.\n", + __func__, serdes_id, + serdes_type_to_string[serdes_type], + serd_max_num); + return MV_FAIL; } return MV_OK; -- cgit v0.10.2 From c90d7ab6b01e58cb3689ff6dac70982bd215d9b0 Mon Sep 17 00:00:00 2001 From: Chris Packham Date: Tue, 23 Aug 2016 12:07:39 +1200 Subject: arm: mvebu: a38x: typo fix cpabilities -> capbilities Signed-off-by: Chris Packham Signed-off-by: Stefan Roese diff --git a/arch/arm/mach-mvebu/serdes/a38x/ctrl_pex.c b/arch/arm/mach-mvebu/serdes/a38x/ctrl_pex.c index 06a7715..98c447c 100644 --- a/arch/arm/mach-mvebu/serdes/a38x/ctrl_pex.c +++ b/arch/arm/mach-mvebu/serdes/a38x/ctrl_pex.c @@ -184,7 +184,7 @@ int hws_pex_config(const struct serdes_map *serdes_map, u8 count) DEBUG_INIT_S("PCIe, Idx "); DEBUG_INIT_D(pex_idx, 1); DEBUG_INIT_S - (": Link upgraded to Gen2 based on client cpabilities\n"); + (": Link upgraded to Gen2 based on client capabilities\n"); } /* Update pex DEVICE ID */ -- cgit v0.10.2 From bdf58c73ca406e31be49ad875969b2f9aacb9b65 Mon Sep 17 00:00:00 2001 From: Simon Baatz Date: Wed, 10 Aug 2016 10:15:42 +0200 Subject: tools: kwboot: patch destaddr only for SoCs with header version 1 Commit f4db6c976cf ("arm: mvebu: Add runtime detection of UART (xmodem) boot-mode") added a change to hdr->destaddr when dynamically patching an image for UART boot mode. With this change, kwboot ceases to work on Kirkwood. Thus, let's change hdr->destaddr only when we are patching an image with header version 1 (Orion and Kirkwood use header version 0). Signed-off-by: Simon Baatz Fixes: f4db6c976cf ("arm: mvebu: Add runtime detection of UART (xmodem) boot-mode") Cc: Stefan Roese Cc: Luka Perkov Cc: Kevin Smith Signed-off-by: Stefan Roese diff --git a/tools/kwboot.c b/tools/kwboot.c index e00958a..26b3949 100644 --- a/tools/kwboot.c +++ b/tools/kwboot.c @@ -655,14 +655,6 @@ kwboot_img_patch_hdr(void *img, size_t size) hdr->blockid = IBR_HDR_UART_ID; - /* - * Subtract mkimage header size from destination address - * as this header is not expected by the Marvell BootROM. - * This way, the execution address is identical to the - * one the image is compiled for (TEXT_BASE). - */ - hdr->destaddr = hdr->destaddr - sizeof(struct image_header); - if (image_ver == 0) { struct main_hdr_v0 *hdr_v0 = img; @@ -672,6 +664,14 @@ kwboot_img_patch_hdr(void *img, size_t size) hdr_v0->srcaddr = hdr_v0->ext ? sizeof(struct kwb_header) : sizeof(*hdr_v0); + } else { + /* + * Subtract mkimage header size from destination address + * as this header is not expected by the Marvell BootROM. + * This way, the execution address is identical to the + * one the image is compiled for (TEXT_BASE). + */ + hdr->destaddr = hdr->destaddr - sizeof(struct image_header); } hdr->checksum = kwboot_img_csum8(hdr, hdrsz) - csum; -- cgit v0.10.2