diff loadtools/fldevs.c @ 506:0dd2c87c1b63

fc-loadtool flash support overhaul
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 28 May 2019 05:12:47 +0000
parents
children 9a478d33b3ca
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loadtools/fldevs.c	Tue May 28 05:12:47 2019 +0000
@@ -0,0 +1,302 @@
+/*
+ * This module holds the tables of supported flash devices
+ */
+
+#include <sys/types.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <strings.h>
+#include <stdlib.h>
+#include "flash.h"
+
+extern struct flash_cmdset flash_cmdset_amd;
+extern struct flash_cmdset flash_cmdset_intel;
+extern struct flash_cmdset flash_cmdset_intel_w30;
+
+/* flash bank geometries */
+
+static struct flash_geom geom_2M_topboot = {
+	.total_size	= 0x200000,
+	.nregions	= 2,
+	.regions	= {0x10000, 31, 0x2000, 8},
+	.total_sectors	= 39,
+};
+
+static struct flash_geom geom_4M_topboot = {
+	.total_size	= 0x400000,
+	.nregions	= 2,
+	.regions	= {0x10000, 63, 0x2000, 8},
+	.total_sectors	= 71,
+};
+
+static struct flash_geom geom_8M_topboot = {
+	.total_size	= 0x800000,
+	.nregions	= 2,
+	.regions	= {0x10000, 127, 0x2000, 8},
+	.total_sectors	= 135,
+};
+
+static struct flash_geom geom_8M_bottomboot = {
+	.total_size	= 0x800000,
+	.nregions	= 2,
+	.regions	= {0x2000, 8, 0x10000, 127},
+	.total_sectors	= 135,
+};
+
+static struct flash_geom geom_8M_topboot_big = {
+	.total_size	= 0x800000,
+	.nregions	= 2,
+	.regions	= {0x40000, 31, 0x10000, 4},
+	.total_sectors	= 35,
+};
+
+static struct flash_geom geom_8M_bottomboot_big = {
+	.total_size	= 0x800000,
+	.nregions	= 2,
+	.regions	= {0x10000, 4, 0x40000, 31},
+	.total_sectors	= 35,
+};
+
+/* Intel and compatible flash chips */
+
+static struct cfi_check intel_2M_topboot_cfi[] = {
+	{0x10, 'Q'},
+	{0x11, 'R'},
+	{0x12, 'Y'},
+	{0x13, 0x03},
+	{0x14, 0x00},
+	{0x27, 0x15},
+	{0x2C, 0x02},
+	{0x2D, 0x1E},
+	{0x2E, 0x00},
+	{0x2F, 0x00},
+	{0x30, 0x01},
+	{0x31, 0x07},
+	{0x32, 0x00},
+	{0x33, 0x20},
+	{0x34, 0x00},
+	{-1,   0}
+};
+
+static struct cfi_check intel_4M_topboot_cfi[] = {
+	{0x10, 'Q'},
+	{0x11, 'R'},
+	{0x12, 'Y'},
+	{0x13, 0x03},
+	{0x14, 0x00},
+	{0x27, 0x16},
+	{0x2C, 0x02},
+	{0x2D, 0x3E},
+	{0x2E, 0x00},
+	{0x2F, 0x00},
+	{0x30, 0x01},
+	{0x31, 0x07},
+	{0x32, 0x00},
+	{0x33, 0x20},
+	{0x34, 0x00},
+	{-1,   0}
+};
+
+static struct cfi_check intel_8M_topboot_cfi[] = {
+	{0x10, 'Q'},
+	{0x11, 'R'},
+	{0x12, 'Y'},
+	{0x13, 0x03},
+	{0x14, 0x00},
+	{0x27, 0x17},
+	{0x2C, 0x02},
+	{0x2D, 0x7E},
+	{0x2E, 0x00},
+	{0x2F, 0x00},
+	{0x30, 0x01},
+	{0x31, 0x07},
+	{0x32, 0x00},
+	{0x33, 0x20},
+	{0x34, 0x00},
+	{-1,   0}
+};
+
+static struct cfi_check intel_8M_bottomboot_cfi[] = {
+	{0x10, 'Q'},
+	{0x11, 'R'},
+	{0x12, 'Y'},
+	{0x13, 0x03},
+	{0x14, 0x00},
+	{0x27, 0x17},
+	{0x2C, 0x02},
+	{0x2D, 0x07},
+	{0x2E, 0x00},
+	{0x2F, 0x20},
+	{0x30, 0x00},
+	{0x31, 0x7E},
+	{0x32, 0x00},
+	{0x33, 0x00},
+	{0x34, 0x01},
+	{-1,   0}
+};
+
+struct flash_device flashdev_28F160C3T = {
+	.name			= "Intel 28F160C3T",
+	.cfi_table		= intel_2M_topboot_cfi,
+	.required_global_config	= FLASH_GLOBAL_CFG_SINGLE_4M,
+	.bank_geom		= {&geom_2M_topboot, 0},
+	.cmdset			= &flash_cmdset_intel,
+};
+
+struct flash_device flashdev_28F320C3T = {
+	.name			= "Intel 28F320C3T",
+	.cfi_table		= intel_4M_topboot_cfi,
+	.required_global_config	= FLASH_GLOBAL_CFG_SINGLE_4M,
+	.bank_geom		= {&geom_4M_topboot, 0},
+	.cmdset			= &flash_cmdset_intel,
+};
+
+struct flash_device flashdev_28F640C3T = {
+	.name			= "Intel 28F640C3T",
+	.cfi_table		= intel_8M_topboot_cfi,
+	.required_global_config	= FLASH_GLOBAL_CFG_SINGLE_8M,
+	.bank_geom		= {&geom_8M_topboot, 0},
+	.cmdset			= &flash_cmdset_intel,
+};
+
+struct flash_device flashdev_28F640C3B = {
+	.name			= "Intel 28F640C3B",
+	.cfi_table		= intel_8M_bottomboot_cfi,
+	.required_global_config	= FLASH_GLOBAL_CFG_SINGLE_8M,
+	.bank_geom		= {&geom_8M_bottomboot, 0},
+	.cmdset			= &flash_cmdset_intel,
+};
+
+struct flash_device flashdev_28F640W30T = {
+	.name			= "Intel 28F640W30T",
+	.cfi_table		= intel_8M_topboot_cfi,
+	.required_global_config	= FLASH_GLOBAL_CFG_SINGLE_8M,
+	.bank_geom		= {&geom_8M_topboot, 0},
+	.cmdset			= &flash_cmdset_intel_w30,
+};
+
+struct flash_device flashdev_28F640W30B = {
+	.name			= "Intel 28F640W30B",
+	.cfi_table		= intel_8M_bottomboot_cfi,
+	.required_global_config	= FLASH_GLOBAL_CFG_SINGLE_8M,
+	.bank_geom		= {&geom_8M_bottomboot, 0},
+	.cmdset			= &flash_cmdset_intel_w30,
+};
+
+/* Spansion S71PL-J and S71PL-N flash */
+
+static struct cfi_check spansion_PL129J_cfi[] = {
+	{0x10, 'Q'},
+	{0x11, 'R'},
+	{0x12, 'Y'},
+	{0x13, 0x02},
+	{0x14, 0x00},
+	{0x15, 0x40},
+	{0x16, 0x00},
+	{0x27, 0x18},
+	{0x2C, 0x03},
+	{0x2D, 0x07},
+	{0x2E, 0x00},
+	{0x2F, 0x20},
+	{0x30, 0x00},
+	{0x31, 0xFD},
+	{0x32, 0x00},
+	{0x33, 0x00},
+	{0x34, 0x01},
+	{0x35, 0x07},
+	{0x36, 0x00},
+	{0x37, 0x20},
+	{0x38, 0x00},
+	{0x40, 'P'},
+	{0x41, 'R'},
+	{0x42, 'I'},
+	{0x43, '1'},
+	{0x44, '3'},
+	{-1,   0}
+};
+
+struct flash_device flashdev_PL129J = {
+	.name			= "Spansion S29PL129J",
+	.cfi_table		= spansion_PL129J_cfi,
+	.required_global_config	= FLASH_GLOBAL_CFG_DUAL_8M,
+	.bank_geom		= {&geom_8M_bottomboot, &geom_8M_topboot},
+	.cmdset			= &flash_cmdset_amd,
+};
+
+static struct cfi_check spansion_PL129N_cfi[] = {
+	{0x10, 'Q'},
+	{0x11, 'R'},
+	{0x12, 'Y'},
+	{0x13, 0x02},
+	{0x14, 0x00},
+	{0x15, 0x40},
+	{0x16, 0x00},
+	{0x27, 0x18},
+	{0x2C, 0x03},
+	{0x2D, 0x03},
+	{0x2E, 0x00},
+	{0x2F, 0x00},
+	{0x30, 0x01},
+	{0x31, 0x3D},
+	{0x32, 0x00},
+	{0x33, 0x00},
+	{0x34, 0x04},
+	{0x35, 0x03},
+	{0x36, 0x00},
+	{0x37, 0x00},
+	{0x38, 0x01},
+	{0x40, 'P'},
+	{0x41, 'R'},
+	{0x42, 'I'},
+	{0x43, '1'},
+	{0x44, '4'},
+	{-1,   0}
+};
+
+struct flash_device flashdev_PL129N = {
+	.name			= "Spansion S29PL129N",
+	.cfi_table		= spansion_PL129N_cfi,
+	.required_global_config	= FLASH_GLOBAL_CFG_DUAL_8M,
+	.bank_geom		= {&geom_8M_bottomboot_big,
+				   &geom_8M_topboot_big},
+	.cmdset			= &flash_cmdset_amd,
+};
+
+/* Samsung K5A32xxCTM introduced onto the scene by Openmoko */
+
+static struct cfi_check samsung_4M_topboot_cfi[] = {
+	{0x10, 'Q'},
+	{0x11, 'R'},
+	{0x12, 'Y'},
+	{0x13, 0x02},
+	{0x14, 0x00},
+	{0x15, 0x40},
+	{0x16, 0x00},
+	{0x27, 0x16},
+	{0x2C, 0x02},
+	{0x2D, 0x07},
+	{0x2E, 0x00},
+	{0x2F, 0x20},
+	{0x30, 0x00},
+	{0x31, 0x3E},
+	{0x32, 0x00},
+	{0x33, 0x00},
+	{0x34, 0x01},
+	{0x40, 'P'},
+	{0x41, 'R'},
+	{0x42, 'I'},
+	{0x43, '3'},
+	{0x44, '3'},
+	{0x4F, 0x03},
+	{-1,   0}
+};
+
+struct flash_device flashdev_K5A32xx_T = {
+	.name			= "Samsung K5A32xx_T",
+	.cfi_table		= samsung_4M_topboot_cfi,
+	.required_global_config	= FLASH_GLOBAL_CFG_SINGLE_4M,
+	.bank_geom		= {&geom_4M_topboot, 0},
+	.cmdset			= &flash_cmdset_amd,
+};