define prowl partition layout
includes
fixes for quantenna file storage in u-boot env:
- u-boot env capped at 24K
- offset to quantenna files should start at 24K, not 4K
fixes for default environment
- wire up SRAM based default environment
- allow saving of default environment to flash
- environment changes before first saveenv+reset are persisted
bake default gfrg240 board configuration into code, so that a
board with no environment comes up and is able to configure the
hardware.
Change-Id: I24eaa2dc5512286a79488b41087d4d0a799786d7
diff --git a/board/ruby/cmd_qtnboard.c b/board/ruby/cmd_qtnboard.c
index 2e5381a..32a28f5 100644
--- a/board/ruby/cmd_qtnboard.c
+++ b/board/ruby/cmd_qtnboard.c
@@ -41,6 +41,25 @@
static const char * const type2name[] = BOARD_CFG_FIELD_NAMES;
+#ifdef GFRG240
+static board_cfg_t g_default_board_cfg = {
+ .bc_board_id = QTN_RUBY_UNIVERSAL_BOARD_ID,
+ .bc_name = "gfrg240",
+ .bc_ddr_type = DDR3_16_WINBOND,
+ .bc_ddr_speed = DDR3_500MHz,
+ .bc_ddr_size = DDR_256MB,
+ .bc_emac0 = EMAC_IN_USE,
+ .bc_emac1 =
+ (EMAC_IN_USE | EMAC_PHY_FORCE_1000MB | EMAC_PHY_NOT_IN_USE | EMAC_PHY_AR8327),
+ .bc_phy0_addr = 0x4,
+ .bc_phy1_addr = EMAC_PHY_ADDR_SCAN,
+ .bc_spi1 = SPI1_NOT_IN_USE,
+ .bc_wifi_hw = QTN_TPZ_SKY85703,
+ .bc_uart1 = UART1_NOT_IN_USE,
+ .bc_pcie = PCIE_ROOTCOMPLEX,
+ .bc_rgmii_timing = 0x84848484,
+ };
+#else
static board_cfg_t g_default_board_cfg = {
.bc_board_id = QTN_RUBY_UNIVERSAL_BOARD_ID,
.bc_name = "default board",
@@ -56,6 +75,7 @@
.bc_uart1 = UART1_NOT_IN_USE,
.bc_rgmii_timing = CONFIG_ARCH_RGMII_DEFAULT,
};
+#endif /* #ifdef GFRG240 */
#ifndef TOPAZ_EP_MINI_UBOOT
static uint32_t qtn_board_get_end(void)
@@ -388,8 +408,13 @@
uint16_t board_config_size = 0;
const uint8_t * const board_config = qtn_get_file_env_ptr(QTN_HW_BOARD_CFG_BIN, &board_config_size);
+#ifdef GFRG240
if (board_config == NULL) {
-
+ memcpy(&board_hw_config, &g_default_board_cfg, sizeof(board_cfg_t));
+ return SUCCESS;
+ }
+#endif
+ if (board_config == NULL) {
if (qtn_get_emac_set() < 0) {
return FAIL;
}
diff --git a/board/ruby/cmd_qtnboot.c b/board/ruby/cmd_qtnboot.c
index 4b63a4c..e9e802c 100644
--- a/board/ruby/cmd_qtnboot.c
+++ b/board/ruby/cmd_qtnboot.c
@@ -10,6 +10,7 @@
#define BUFSIZE 256
+#ifndef GFRG240
static int qtnboot_check(char *buf,
unsigned long flash_size, unsigned long sector_size,
unsigned long safety_addr, unsigned long safety_size,
@@ -167,20 +168,6 @@
"${" SAFETY_IMG_SIZE_ARG "} and ${" LIVE_IMG_SIZE_ARG "}\n"
);
-int _run(const char *function_name, const char *fmt, ...)
-{
- va_list args;
- char cmdbuf[BUFSIZE];
-
- va_start(args, fmt);
- vsprintf(cmdbuf, fmt, args);
- va_end(args);
-
- printf("%s: %s\n", function_name, cmdbuf);
-
- return run_command(cmdbuf, 0);
-}
-
int do_qtnboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
unsigned long safety_addr = 0;
@@ -276,7 +263,21 @@
"If env variable 'bootselect' is 1, boot from image at safety address;\n"
"Otherwise boot from image at live address\n"
);
+#endif /* ifndef GFRG240 */
+int _run(const char *function_name, const char *fmt, ...)
+{
+ va_list args;
+ char cmdbuf[BUFSIZE];
+
+ va_start(args, fmt);
+ vsprintf(cmdbuf, fmt, args);
+ va_end(args);
+
+ printf("%s: %s\n", function_name, cmdbuf);
+
+ return run_command(cmdbuf, 0);
+}
int do_setgpio(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
diff --git a/board/ruby/pcie.c b/board/ruby/pcie.c
index 861ff97..351173f 100755
--- a/board/ruby/pcie.c
+++ b/board/ruby/pcie.c
@@ -341,6 +341,42 @@
}
#ifndef TOPAZ_EP_MINI_UBOOT
+#ifdef GFRG240
+static void set_tiny_mtdparts(void)
+{
+ char mtdparts[BUFSIZE];
+
+ sprintf(mtdparts, "spi_flash:"
+ "%dk(" MTD_PARTNAME_UBOOT_BIN "),"
+ "%dk(" MTD_PARTNAME_UBOOT_ENV "),"
+ "%dk(" MTD_PARTNAME_RESERVED_A "),"
+ "%dk(" MTD_PARTNAME_VENDOR "),"
+ "%dk(" MTD_PARTNAME_RESERVED_B "),"
+ "%dk(" MTD_PARTNAME_HNVRAM "),"
+ "%dk(" MTD_PARTNAME_KERNEL0 "),"
+ "%dk(" MTD_PARTNAME_KERNEL1 "),"
+ "-(" MTD_PARTNAME_DATA ")",
+
+ UBOOT_TEXT_PARTITION_SIZE / 1024,
+ UBOOT_ENV_PARTITION_SIZE / 1024,
+ UBOOT_RESERVED_A_PARTITION_SIZE / 1024,
+ UBOOT_VENDOR_PARTITION_SIZE / 1024,
+ UBOOT_RESERVED_B_PARTITION_SIZE / 1024,
+ UBOOT_HNVRAM_PARTITION_SIZE / 1024,
+ UBOOT_KERNEL_PARTITION_SIZE / 1024,
+ UBOOT_KERNEL_PARTITION_SIZE / 1024
+ );
+
+ setenv("mtdparts", mtdparts);
+}
+
+static int prepare_tiny_bootargs(void)
+{
+ set_tiny_mtdparts();
+
+ return 0;
+}
+#else // #ifdef GFRG240
static void set_tiny_mtdparts(unsigned long linux_safety_size, unsigned long linux_live_size)
{
char mtdparts[BUFSIZE];
@@ -373,6 +409,7 @@
return 0;
}
+#endif // #ifdef GFRG240
static void set_tiny_bootargs(void)
{
diff --git a/board/ruby/spi_flash.c b/board/ruby/spi_flash.c
index 3434892..66e0fbc 100644
--- a/board/ruby/spi_flash.c
+++ b/board/ruby/spi_flash.c
@@ -30,7 +30,11 @@
#include <asm/errno.h>
#define SPI_PAGE_SIZE 256
-#define ENV_BASE_SIZE (CONFIG_ENV_BASE_SIZE - ENV_HEADER_SIZE)
+/*
+ * quantenna stores data in the uboot env partition hidden from setenv.
+ * the environment space is artificially shrunk to give them this space.
+ */
+#define ENV_SHRUNK_SIZE (CONFIG_ENV_SHRUNK_SIZE - ENV_HEADER_SIZE)
#if defined(FLASH_SUPPORT_256KB)
#define SPI_FLASH_256KB_SIZE (256 * 1024)
@@ -38,7 +42,7 @@
#define SPI_FLASH_UBOOT_ADDR 0
-#define SPI_FLASH_FULL_UBOOT_SIZE (128*1024) /* Normal Ruby u-boot partition is just under 128k */
+#define SPI_FLASH_FULL_UBOOT_SIZE UBOOT_TEXT_PARTITION_SIZE
#define SPI_FLASH_MINI_UBOOT_SIZE (20*1024) /* Ruby mini u-boot is 20k */
#define SPI_FLASH_TEST 1
@@ -1038,7 +1042,7 @@
{
u32 crc, len, ret_len, new, addr;
uchar buf[64];
- u32 env_size[] = {ENV_SIZE, F64K_ENV_PARTITION_SIZE - ENV_HEADER_SIZE, ENV_BASE_SIZE};
+ u32 env_size[] = {ENV_SIZE, ENV_SHRUNK_SIZE};
u32 idx = 0;
len = sizeof(crc);
@@ -1079,11 +1083,14 @@
int env_init(void)
{
u32 env_addr;
+#ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
u32 env_addr_backup, env_end;
+#endif
if (gd->env_valid == 0) {
env_addr = spi_flash_env_addr(0);
+#ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
/* No ENV & CAL backup for mini-uboot */
if (spi_flash_uboot_size() == SPI_FLASH_FULL_UBOOT_SIZE) {
#if defined(FLASH_SUPPORT_256KB)
@@ -1097,17 +1104,20 @@
env_addr_backup = 0;
env_end = spi_flash_env_addr(1);
}
+#endif
if (env_verify(env_addr) == 0) {
printf("Valid CRC found in flash restoring env...\n");
// gd->env_addr = offsetof(env_t,data); - malloced later...
gd->env_valid = 1;
+#ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
} else if (env_end <= IMAGES_START_ADDR
&& env_end < spi_flash_size()
&& env_verify(env_addr_backup) == 0) {
printf("Valid CRC found in flash - restoring backup...\n");
// gd->env_addr = offsetof(env_t,data); - malloced later...
gd->env_valid = 2;
+#endif
} else {
printf("Invalid CRC in flash using default env...\n");
gd->env_addr = (ulong) &default_environment[0];
diff --git a/common/env_common.c b/common/env_common.c
index f0ef16a..314ff5d 100644
--- a/common/env_common.c
+++ b/common/env_common.c
@@ -239,10 +239,14 @@
env_ptr->flags = 0xFF;
#endif
-#ifndef CONFIG_RUBY_BOARD
+ /*
+ * Switch the u-boot environment over to the copy we just
+ * placed into SRAM. Update the CRC, and mark it as valid
+ * so that we can write it out to the flash.
+ */
+ gd->env_addr = env_ptr->data;
env_crc_update ();
gd->env_valid = 1;
-#endif
}
void env_relocate (void)
diff --git a/include/environment.h b/include/environment.h
index 5a91b79..32e70c5 100644
--- a/include/environment.h
+++ b/include/environment.h
@@ -109,7 +109,7 @@
#endif
-#define ENV_SIZE (CONFIG_ENV_SIZE - ENV_HEADER_SIZE)
+#define ENV_SIZE (CONFIG_ENV_SHRUNK_SIZE - ENV_HEADER_SIZE)
typedef struct environment_s {
uint32_t crc; /* CRC32 over data bytes */
diff --git a/quantenna/common/current_platform.h b/quantenna/common/current_platform.h
index e8e3e34..ea6efbb 100644
--- a/quantenna/common/current_platform.h
+++ b/quantenna/common/current_platform.h
@@ -7,6 +7,8 @@
#define ARC_HW_REV_NEEDS_TLBMISS_FIX
#define TOPAZ_SUPPORT_UMM 1
#define TOPAZ_SUPPORT_256MB_DDR 1
-#define FLASH_SUPPORT_64KB
#define WPA_TKIP_SUPPORT 0
#define SIGMA_TESTBED_SUPPORT 0
+#define GFRG240 1
+
+#define PLATFORM_DEFAULT_BOARD_ID QTN_RUBY_UNIVERSAL_BOARD_ID
diff --git a/quantenna/common/ruby_partitions.h b/quantenna/common/ruby_partitions.h
index 1af2bc5..0ebd4a0 100644
--- a/quantenna/common/ruby_partitions.h
+++ b/quantenna/common/ruby_partitions.h
@@ -28,6 +28,41 @@
#ifndef __RUBY_PARTITIONS_H
#define __RUBY_PARTITIONS_H
+#ifdef GFRG240
+#define UBOOT_TEXT_PARTITION_SIZE 0x0040000 /* 256K */
+#define UBOOT_ENV_PARTITION_SIZE 0x0010000 /* 64K */
+#define UBOOT_RESERVED_A_PARTITION_SIZE 0x0030000 /* 192K */
+#define UBOOT_VENDOR_PARTITION_SIZE 0x0080000 /* 512K */
+#define UBOOT_RESERVED_B_PARTITION_SIZE 0x0100000 /* 1M */
+#define UBOOT_HNVRAM_PARTITION_SIZE 0x0200000 /* 2M */
+#define UBOOT_KERNEL_PARTITION_SIZE 0x1C00000 /* 28M (x2) */
+#define UBOOT_DATA_PARTITION_SIZE 0x0400000 /* 4M */
+
+#define CONFIG_ENV_OFFSET 0x0040000 /* offset of uboot environment */
+
+#define MTD_PARTNAME_UBOOT_BIN "uboot"
+#define MTD_PARTNAME_UBOOT_ENV "uboot_env"
+#define MTD_PARTNAME_RESERVED_A "reserved_a"
+#define MTD_PARTNAME_VENDOR "vendor"
+#define MTD_PARTNAME_RESERVED_B "reserved_b"
+#define MTD_PARTNAME_HNVRAM "hnvram"
+#define MTD_PARTNAME_KERNEL0 "kernel0"
+#define MTD_PARTNAME_KERNEL1 "kernel1"
+#define MTD_PARTNAME_DATA "data+ubi"
+
+/*
+ * quantenna stores files in the uboot env partition.
+ * limit the size of uboot environment to 24K, and allow
+ * quantenna file storage in the remaining 40K.
+*/
+#define CONFIG_ENV_SHRUNK_SIZE (24 * 1024) /* limited uboot environment */
+#define BOOT_CFG_DEF_START CONFIG_ENV_SHRUNK_SIZE /* qtn file starts after uboot-env */
+#define BOOT_CFG_SIZE (UBOOT_ENV_PARTITION_SIZE - CONFIG_ENV_SHRUNK_SIZE)
+#define BOOT_CFG_DATA_SIZE (UBOOT_ENV_PARTITION_SIZE - sizeof(u32))
+
+
+#else // #ifdef GFRG240
+
#define F64K_UBOOT_PIGGY_PARTITION_SIZE 0x5000
#if defined(FLASH_SUPPORT_256KB)
@@ -97,6 +132,8 @@
#define IMG_SIZE_LIMIT_PLATFORM IMG_SIZE_16M_FLASH_2_IMG
+#endif // #ifdef GFRG240
+
#endif // #ifndef __RUBY_PARTITIONS_H