diff options
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.26/1212-introduce-BANKCON-meddling-sysfs.patch.patch')
-rwxr-xr-x | target/linux/s3c24xx/patches-2.6.26/1212-introduce-BANKCON-meddling-sysfs.patch.patch | 300 |
1 files changed, 0 insertions, 300 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.26/1212-introduce-BANKCON-meddling-sysfs.patch.patch b/target/linux/s3c24xx/patches-2.6.26/1212-introduce-BANKCON-meddling-sysfs.patch.patch deleted file mode 100755 index 207512e..0000000 --- a/target/linux/s3c24xx/patches-2.6.26/1212-introduce-BANKCON-meddling-sysfs.patch.patch +++ /dev/null @@ -1,300 +0,0 @@ -From 3db422fde610960fdca8bd2a2b882015a62860ca Mon Sep 17 00:00:00 2001 -From: Andy Green <andy@openmoko.com> -Date: Fri, 25 Jul 2008 23:06:20 +0100 -Subject: [PATCH] introduce-BANKCON-meddling-sysfs.patch - -A few questions have been flying around about how optimal -our waitstates are for various things including Glamo. - -This patch introduces new sysfs nodes - -/sys/devices/platform/neo1973-memconfig.0/BANKCON0 -... -/sys/devices/platform/neo1973-memconfig.0/BANKCON7 - -If you cat them you get translated info about bus speed on -that chip select, eg, - -# cat /sys/devices/platform/neo1973-memconfig.0/BANKCON1 -BANKCON1 = 0x00000A40 - Type = ROM / SRAM - PMC = normal (1 data) - Tacp = 2 clocks - Tcah = 0 clocks - Tcoh = 1 clock - Tacc = 3 clocks - Tcos = 1 clock - Tacs = 0 clocks - -You can write them in hex too - -# echo 0x200 > /sys/devices/platform/neo1973-memconfig.0/BANKCON1 - -The write format for BANKCON0 - 5 looks like this - - b1..b0 PMC Page Mode Config - b3..b2 Tacp Page Mode Access Cycle - b5..b4 Tcah Address hold after CS deasserted - b7..b6 Tcoh CS hold after OE deasserted - b10..b8 Tacc Access Cycle Period - b12..b11 Tcos CS setup before OE asserted - b14..b13 Tacs Address setup before CS asserted - -BANKCON 6 and 7 have two extra bits - - b16..b15 MT Memory type (00=ROM/SRAM, 11=DRAM) - -If it's ROM/SRAM, the rest of the bits are as described above. -For DRAM - - b1..b0 SCAN Column address number - b3..b2 RAS to CAS delay - -The patch is intended to let people experiement on their own. But -of course you will crash things for sure if the timing is wrong, and -you can also trash SD Card data if you make Glamo unstable, so remove -it or remount ro first. Other horrible things are possible, but -because the settings aren't sticky, you should always be able to -recover by either normal reboot usually or at worst NOR boot and then -dfu. Most likely you will just crash your session and have to reboot -if your settings are bad, but consider yourself warned bad things are -possible. :-) - -Signed-off-by: Andy Green <andy@openmoko.com> ---- - arch/arm/mach-s3c2440/mach-gta02.c | 6 + - arch/arm/plat-s3c24xx/Makefile | 3 +- - arch/arm/plat-s3c24xx/neo1973_memconfig.c | 186 +++++++++++++++++++++++++++++ - 3 files changed, 194 insertions(+), 1 deletions(-) - create mode 100644 arch/arm/plat-s3c24xx/neo1973_memconfig.c - -diff --git a/arch/arm/mach-s3c2440/mach-gta02.c b/arch/arm/mach-s3c2440/mach-gta02.c -index b3d3797..f30abb6 100644 ---- a/arch/arm/mach-s3c2440/mach-gta02.c -+++ b/arch/arm/mach-s3c2440/mach-gta02.c -@@ -412,6 +412,11 @@ struct platform_device gta02_resume_reason_device = { - .num_resources = 0, - }; - -+struct platform_device gta02_memconfig_device = { -+ .name = "neo1973-memconfig", -+ .num_resources = 0, -+}; -+ - static struct map_desc gta02_iodesc[] __initdata = { - { - .virtual = 0xe0000000, -@@ -829,6 +834,7 @@ static struct platform_device *gta02_devices[] __initdata = { - >a02_nor_flash, - &sc32440_fiq_device, - >a02_version_device, -+ >a02_memconfig_device, - >a02_resume_reason_device, - &s3c24xx_pwm_device, - -diff --git a/arch/arm/plat-s3c24xx/Makefile b/arch/arm/plat-s3c24xx/Makefile -index f60dc5f..baae831 100644 ---- a/arch/arm/plat-s3c24xx/Makefile -+++ b/arch/arm/plat-s3c24xx/Makefile -@@ -35,4 +35,5 @@ obj-$(CONFIG_MACH_NEO1973) += neo1973_version.o \ - neo1973_pm_gps.o \ - neo1973_pm_bt.o \ - neo1973_shadow.o \ -- neo1973_pm_resume_reason.o -+ neo1973_pm_resume_reason.o \ -+ neo1973_memconfig.o -diff --git a/arch/arm/plat-s3c24xx/neo1973_memconfig.c b/arch/arm/plat-s3c24xx/neo1973_memconfig.c -new file mode 100644 -index 0000000..55d85fc ---- /dev/null -+++ b/arch/arm/plat-s3c24xx/neo1973_memconfig.c -@@ -0,0 +1,186 @@ -+/* -+ * Memory access timing control sysfs for the s3c24xx based device -+ * -+ * (C) 2008 by Openmoko Inc. -+ * Author: Andy Green <andy@openmoko.com> -+ * All rights reserved. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation -+ * -+ */ -+ -+#include <linux/module.h> -+#include <linux/init.h> -+#include <linux/kernel.h> -+#include <linux/platform_device.h> -+ -+#include <asm/hardware.h> -+#include <asm/mach-types.h> -+#include <asm/arch/regs-mem.h> -+ -+static ssize_t neo1973_memconfig_read(struct device *dev, -+ struct device_attribute *attr, char *buf) -+{ -+ int index = attr->attr.name[strlen(attr->attr.name) - 1] - '0'; -+ u32 reg = *((u32 *)(S3C2410_MEMREG(((index + 1) << 2)))); -+ static const char *meaning[][8] = { -+ { -+ [0] = "normal (1 data)", -+ [1] = "4 data", -+ [2] = "8 data", -+ [3] = "16 data", -+ }, { -+ [0] = "2 clocks", -+ [1] = "3 clocks", -+ [2] = "4 clocks", -+ [3] = "6 clocks", -+ }, { -+ [0] = "0 clocks", -+ [1] = "1 clock", -+ [2] = "2 clocks", -+ [3] = "4 clocks", -+ }, { -+ [0] = "1 clock", -+ [1] = "2 clocks", -+ [2] = "3 clocks", -+ [3] = "4 clocks", -+ [4] = "6 clocks", -+ [5] = "8 clocks", -+ [6] = "10 clocks", -+ [7] = "14 clocks", -+ }, { /* after this, only for CS6 and CS7 */ -+ [0] = "ROM / SRAM", -+ [1] = "(illegal)", -+ [2] = "(illegal)", -+ [3] = "Sync DRAM", -+ }, { -+ [0] = "8 Column bits", -+ [1] = "9 Column bits", -+ [2] = "10 Column bits", -+ [3] = "(illegal)", -+ }, { -+ [0] = "2 clocks", -+ [1] = "3 clocks", -+ [2] = "4 clocks", -+ [3] = "(illegal)", -+ } -+ }; -+ -+ if (index >= 6) -+ if (((reg >> 15) & 3) == 3) /* DRAM */ -+ return sprintf(buf, "BANKCON%d = 0x%08X\n DRAM:\n" -+ " Trcd = %s\n SCAN = %s\n", index, -+ reg, meaning[5][reg & 3], -+ meaning[1][(reg >> 2) & 3]); -+ -+ return sprintf(buf, "BANKCON%d = 0x%08X\n Type = %s\n PMC = %s\n" -+ " Tacp = %s\n Tcah = %s\n Tcoh = %s\n Tacc = %s\n" -+ " Tcos = %s\n Tacs = %s\n", -+ index, reg, meaning[4][(reg >> 15) & 3], -+ meaning[0][reg & 3], -+ meaning[1][(reg >> 2) & 3], -+ meaning[2][(reg >> 4) & 3], -+ meaning[2][(reg >> 6) & 3], -+ meaning[3][(reg >> 8) & 7], -+ meaning[2][(reg >> 11) & 3], -+ meaning[2][(reg >> 13) & 3]); -+} -+ -+static ssize_t neo1973_memconfig_write(struct device *dev, -+ struct device_attribute *attr, const char *buf, size_t count) -+{ -+ int index = attr->attr.name[strlen(attr->attr.name) - 1] - '0'; -+ unsigned long val = simple_strtoul(buf, NULL, 16); -+ -+ dev_info(dev, "setting BANKCON%d <- 0x%08X\n", index, (u32)val); -+ -+ *((u32 *)(S3C2410_MEMREG(((index + 1) << 2)))) = (u32)val; -+ -+ return count; -+} -+ -+ -+static DEVICE_ATTR(BANKCON0, 0644, neo1973_memconfig_read, -+ neo1973_memconfig_write); -+static DEVICE_ATTR(BANKCON1, 0644, neo1973_memconfig_read, -+ neo1973_memconfig_write); -+static DEVICE_ATTR(BANKCON2, 0644, neo1973_memconfig_read, -+ neo1973_memconfig_write); -+static DEVICE_ATTR(BANKCON3, 0644, neo1973_memconfig_read, -+ neo1973_memconfig_write); -+static DEVICE_ATTR(BANKCON4, 0644, neo1973_memconfig_read, -+ neo1973_memconfig_write); -+static DEVICE_ATTR(BANKCON5, 0644, neo1973_memconfig_read, -+ neo1973_memconfig_write); -+static DEVICE_ATTR(BANKCON6, 0644, neo1973_memconfig_read, -+ neo1973_memconfig_write); -+static DEVICE_ATTR(BANKCON7, 0644, neo1973_memconfig_read, -+ neo1973_memconfig_write); -+ -+static struct attribute *neo1973_memconfig_sysfs_entries[] = { -+ &dev_attr_BANKCON0.attr, -+ &dev_attr_BANKCON1.attr, -+ &dev_attr_BANKCON2.attr, -+ &dev_attr_BANKCON3.attr, -+ &dev_attr_BANKCON4.attr, -+ &dev_attr_BANKCON5.attr, -+ &dev_attr_BANKCON6.attr, -+ &dev_attr_BANKCON7.attr, -+ NULL -+}; -+ -+static struct attribute_group neo1973_memconfig_attr_group = { -+ .name = NULL, -+ .attrs = neo1973_memconfig_sysfs_entries, -+}; -+ -+static int __init neo1973_memconfig_probe(struct platform_device *pdev) -+{ -+ dev_info(&pdev->dev, "starting\n"); -+ -+ switch (machine_arch_type) { -+#ifdef CONFIG_MACH_NEO1973_GTA01 -+ case MACH_TYPE_NEO1973_GTA01: -+ return -EINVAL; -+#endif /* CONFIG_MACH_NEO1973_GTA01 */ -+ default: -+ break; -+ } -+ -+ return sysfs_create_group(&pdev->dev.kobj, -+ &neo1973_memconfig_attr_group); -+} -+ -+static int neo1973_memconfig_remove(struct platform_device *pdev) -+{ -+ sysfs_remove_group(&pdev->dev.kobj, &neo1973_memconfig_attr_group); -+ return 0; -+} -+ -+static struct platform_driver neo1973_memconfig_driver = { -+ .probe = neo1973_memconfig_probe, -+ .remove = neo1973_memconfig_remove, -+ .driver = { -+ .name = "neo1973-memconfig", -+ }, -+}; -+ -+static int __devinit neo1973_memconfig_init(void) -+{ -+ return platform_driver_register(&neo1973_memconfig_driver); -+} -+ -+static void neo1973_memconfig_exit(void) -+{ -+ platform_driver_unregister(&neo1973_memconfig_driver); -+} -+ -+module_init(neo1973_memconfig_init); -+module_exit(neo1973_memconfig_exit); -+ -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Andy Green <andy@openmoko.com>"); -+MODULE_DESCRIPTION("neo1973 memconfig"); -+ --- -1.5.6.3 - |