diff options
| author | Sergey Lapin <slapin@ossfans.org> | 2010-02-06 23:12:38 +0300 |
|---|---|---|
| committer | Sergey Lapin <slapin@ossfans.org> | 2010-02-06 23:12:38 +0300 |
| commit | 9dbc3d716405d56def0af95748632035864c07b7 (patch) | |
| tree | 8c2865915bcc385c78a32a1c67398e366fea02ae /recipes/linux | |
| parent | 029e21c8111deafa850ad1724e48da29c321f2f8 (diff) | |
| parent | 01dcb228756ee2348a8f6257b39d196340b69d96 (diff) | |
Merge branch 'org.openembedded.dev' of git@git.openembedded.net:openembedded into org.openembedded.dev
Diffstat (limited to 'recipes/linux')
56 files changed, 6776 insertions, 59784 deletions
diff --git a/recipes/linux/chumby-kernel/Makefile-remove-hard-setting-CROSS_COMPILE.patch b/recipes/linux/chumby-kernel/Makefile-remove-hard-setting-CROSS_COMPILE.patch new file mode 100644 index 0000000000..9a0be9a6b3 --- /dev/null +++ b/recipes/linux/chumby-kernel/Makefile-remove-hard-setting-CROSS_COMPILE.patch @@ -0,0 +1,18 @@ +Makefile: remove hard setting CROSS_COMPILE + +* linux-2.6.16-chumby-1.2.tar.gz set CROSS_COMPILE as arm-linux- hardly +* It causes the AR used to compiling linux kernel is arm-linux-ar, which doesn't exist in openembedded at all +Index: linux-2.6.16/Makefile +=================================================================== +--- linux-2.6.16.orig/Makefile 2010-02-01 16:19:36.000000000 +0800 ++++ linux-2.6.16/Makefile 2010-02-01 16:20:02.000000000 +0800 +@@ -173,8 +173,7 @@ + # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile + + ARCH ?= $(SUBARCH) +-#CROSS_COMPILE ?= +-CROSS_COMPILE = arm-linux- ++CROSS_COMPILE ?= + + # Architecture as present in compile.h + UTS_MACHINE := $(ARCH) diff --git a/recipes/linux/chumby-kernel_2.6.16-chumby-1.2.bb b/recipes/linux/chumby-kernel_2.6.16-chumby-1.2.bb index b6cdf48144..4967c1ec35 100644 --- a/recipes/linux/chumby-kernel_2.6.16-chumby-1.2.bb +++ b/recipes/linux/chumby-kernel_2.6.16-chumby-1.2.bb @@ -9,6 +9,7 @@ SRC_URI = "http://files.chumby.com/source/ironforge/build396/linux-2.6.16-chumby http://files.chumby.com/source/ironforge/build396/align.pl \ file://chumby-override-cmdline.patch;patch=1 \ file://disable-fbchanging.patch;patch=1 \ + file://Makefile-remove-hard-setting-CROSS_COMPILE.patch;patch=1 \ file://defconfig \ " diff --git a/recipes/linux/linux-2.6.24/hipox/defconfig b/recipes/linux/linux-2.6.24/hipox/defconfig index f01741d14f..9e53ff867d 100644 --- a/recipes/linux/linux-2.6.24/hipox/defconfig +++ b/recipes/linux/linux-2.6.24/hipox/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.24.4 -# Mon Dec 7 15:30:43 2009 +# Linux kernel version: 2.6.24.7 +# Thu Feb 4 08:14:16 2010 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -483,12 +483,13 @@ CONFIG_MTD_CFI_UTIL=m # # Mapping drivers for chip access # -# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_COMPLEX_MAPPINGS=y CONFIG_MTD_PHYSMAP=m CONFIG_MTD_PHYSMAP_START=0x41000000 CONFIG_MTD_PHYSMAP_LEN=0x00400000 CONFIG_MTD_PHYSMAP_BANKWIDTH=2 # CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_PCI is not set # CONFIG_MTD_INTEL_VR_NOR is not set # CONFIG_MTD_PLATRAM is not set @@ -1034,7 +1035,46 @@ CONFIG_USB_STORAGE=m # # USB Serial Converter support # -# CONFIG_USB_SERIAL is not set +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_AIRPRIME is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_CP2101 is not set +# CONFIG_USB_SERIAL_CYPRESS_M8 is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_FUNSOFT is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IPAQ is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set +# CONFIG_USB_SERIAL_GARMIN is not set +# CONFIG_USB_SERIAL_IPW is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KLSI is not set +# CONFIG_USB_SERIAL_KOBIL_SCT is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +CONFIG_USB_SERIAL_PL2303=m +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_HP4X is not set +# CONFIG_USB_SERIAL_SAFE is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +# CONFIG_USB_SERIAL_TI is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OPTION is not set +# CONFIG_USB_SERIAL_OMNINET is not set +# CONFIG_USB_SERIAL_DEBUG is not set # # USB Miscellaneous drivers @@ -1323,7 +1363,7 @@ CONFIG_NLS_UTF8=y # CONFIG_PRINTK_TIME is not set CONFIG_ENABLE_WARN_DEPRECATED=y CONFIG_ENABLE_MUST_CHECK=y -# CONFIG_MAGIC_SYSRQ is not set +CONFIG_MAGIC_SYSRQ=y # CONFIG_UNUSED_SYMBOLS is not set # CONFIG_DEBUG_FS is not set # CONFIG_HEADERS_CHECK is not set diff --git a/recipes/linux/linux-2.6.24/hipox/hipox-nand-vs-nor.patch b/recipes/linux/linux-2.6.24/hipox/hipox-nand-vs-nor.patch new file mode 100644 index 0000000000..22dcc1bd16 --- /dev/null +++ b/recipes/linux/linux-2.6.24/hipox/hipox-nand-vs-nor.patch @@ -0,0 +1,510 @@ +diff -Nurd linux-2.6.24.orig//arch/arm/mach-hipox/Makefile linux-2.6.24/arch/arm/mach-hipox/Makefile +--- linux-2.6.24.orig//arch/arm/mach-hipox/Makefile 2010-01-29 11:50:34.000000000 +0100 ++++ linux-2.6.24/arch/arm/mach-hipox/Makefile 2010-01-29 11:54:02.000000000 +0100 +@@ -4,7 +4,7 @@ + + # Object file lists. + +-obj-y := hipox.o irq.o time.o dma.o pci.o ahb_mon.o leon.o samba_reserve.o ++obj-y := hipox.o irq.o time.o dma.o pci.o ahb_mon.o leon.o samba_reserve.o smc.o + + obj-$(CONFIG_SYNOPSYS_GMAC) += gmac.o + +diff -Nurd linux-2.6.24.orig//arch/arm/mach-hipox/hipox.c linux-2.6.24/arch/arm/mach-hipox/hipox.c +--- linux-2.6.24.orig//arch/arm/mach-hipox/hipox.c 2010-01-29 11:50:34.000000000 +0100 ++++ linux-2.6.24/arch/arm/mach-hipox/hipox.c 2010-01-29 11:51:26.000000000 +0100 +@@ -25,6 +25,7 @@ + #include <linux/serial.h> + #include <linux/serial_core.h> + #include <linux/serial_8250.h> ++#include <linux/mutex.h> + + #include <asm/sizes.h> + #include <asm/setup.h> +@@ -170,6 +171,10 @@ + // The spinlock exported to allow atomic use of GPIO register set + spinlock_t hipox_gpio_spinlock; + ++// Mutex for NAND/NOR flash access ++DEFINE_MUTEX(hipox_flash_mutex); ++EXPORT_SYMBOL(hipox_flash_mutex); ++ + // To hold LED inversion state + int hipox_global_invert_leds = 0; + #include <linux/module.h> +diff -Nurd linux-2.6.24.orig//arch/arm/mach-hipox/smc.c linux-2.6.24/arch/arm/mach-hipox/smc.c +--- linux-2.6.24.orig//arch/arm/mach-hipox/smc.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.24/arch/arm/mach-hipox/smc.c 2010-01-29 11:51:26.000000000 +0100 +@@ -0,0 +1,73 @@ ++/* ++ * linux/arch/arm/mach-hipox/smc.c ++ * ++ * Locking for OXE810 Static Memory Controller ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++#include <asm/io.h> ++#include <asm/hardware.h> ++#include <asm/arch/smc.h> ++#include <linux/delay.h> ++#include <linux/jiffies.h> ++#include <linux/module.h> ++ ++static unsigned int request_pci_timestamp = 0; ++/* ++ * Request PCI_ARB to grant access to the STATIC core. ++ */ ++void hipox_smc_request_pci_ad_31_0(void) ++{ ++ unsigned maxtries = 10; /* wait for maxtries jiffies at maximum */ ++ ++ /* set PCI_ARB request bit in Sysctrl_PCI_Ctrl1 */ ++ writel(readl(SYS_CTRL_PCI_CTRL1) | (1UL << SYSCTL_PCI_CTRL1_SYSPCI_STATIC_REQ), SYS_CTRL_PCI_CTRL1); ++ ++ /* check if STATIC core has been granted access to the PCI bus ++ and can use PCI_AD[31:0] pins */ ++ for (;maxtries > 0; maxtries--) ++ { ++ if (readl(SYS_CTRL_PCI_STAT) & (1UL << SYSCTL_PCI_STAT_SYSPCI_STATIC_GNT)) ++ break; ++ udelay(10); ++ } ++ ++ /* check for timeout granting access */ ++ if (!(readl(SYS_CTRL_PCI_STAT) & (1UL << SYSCTL_PCI_STAT_SYSPCI_STATIC_GNT))) ++ printk(KERN_WARNING "%s: timeout requesting access to PCI bus for static memory interface\n", __func__); ++ ++ request_pci_timestamp = jiffies_to_msecs(get_jiffies_64()); ++} ++ ++/* ++ * Release access to PCI bus. ++ */ ++void hipox_smc_release_pci_ad_31_0(void) ++{ ++ const unsigned int timeout = 100; /* ms */ ++ unsigned int delta = jiffies_to_msecs(get_jiffies_64()) - request_pci_timestamp; ++ ++ /* set PCI_ARB request bit in Sysctrl_PCI_Ctrl1 */ ++ writel(readl(SYS_CTRL_PCI_CTRL1) & ~(1UL << SYSCTL_PCI_CTRL1_SYSPCI_STATIC_REQ), SYS_CTRL_PCI_CTRL1); ++ ++ if (delta > timeout) ++ { ++ printk(KERN_WARNING "%s: static memory interface blocked PCI bus for %u ms\n", __func__, delta); ++ } ++} ++ ++EXPORT_SYMBOL(hipox_smc_request_pci_ad_31_0); ++EXPORT_SYMBOL(hipox_smc_release_pci_ad_31_0); +diff -Nurd linux-2.6.24.orig//drivers/mtd/chips/cfi_cmdset_0002.c linux-2.6.24/drivers/mtd/chips/cfi_cmdset_0002.c +--- linux-2.6.24.orig//drivers/mtd/chips/cfi_cmdset_0002.c 2010-01-29 11:50:32.000000000 +0100 ++++ linux-2.6.24/drivers/mtd/chips/cfi_cmdset_0002.c 2010-01-29 11:51:26.000000000 +0100 +@@ -46,11 +46,14 @@ + + #define MANUFACTURER_AMD 0x0001 + #define MANUFACTURER_ATMEL 0x001F ++#define MANUFACTURER_AMIC 0x0037 + #define MANUFACTURER_SST 0x00BF + #define SST49LF004B 0x0060 + #define SST49LF040B 0x0050 + #define SST49LF008A 0x005a + #define AT49BV6416 0x00d6 ++#define AT49BV163DT 0x01c2 ++#define A29L160AT 0x22c4 + + static int cfi_amdstd_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *); + static int cfi_amdstd_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *); +@@ -157,6 +160,13 @@ + } + #endif + ++#if defined (CONFIG_ARCH_HIPOX) ++static void fixup_hipox(struct mtd_info *mtd, void *param) ++{ ++ printk(KERN_NOTICE "%s: Hipox NOR-flash detected.\n", __func__); ++} ++#endif /* CONFIG_ARCH_HIPOX */ ++ + static void fixup_use_write_buffers(struct mtd_info *mtd, void *param) + { + struct map_info *map = mtd->priv; +@@ -226,6 +236,10 @@ + { CFI_MFR_AMD, 0x0056, fixup_use_secsi, NULL, }, + { CFI_MFR_AMD, 0x005C, fixup_use_secsi, NULL, }, + { CFI_MFR_AMD, 0x005F, fixup_use_secsi, NULL, }, ++#if defined (CONFIG_ARCH_HIPOX) ++ { CFI_MFR_ATMEL, AT49BV163DT, fixup_hipox, NULL, }, ++ { CFI_MFR_AMIC, A29L160AT, fixup_hipox, NULL, }, ++#endif /* CONFIG_ARCH_HIPOX */ + #if !FORCE_WORD_WRITE + { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers, NULL, }, + #endif +diff -Nurd linux-2.6.24.orig//drivers/mtd/maps/physmap.c linux-2.6.24/drivers/mtd/maps/physmap.c +--- linux-2.6.24.orig//drivers/mtd/maps/physmap.c 2010-01-29 11:50:32.000000000 +0100 ++++ linux-2.6.24/drivers/mtd/maps/physmap.c 2010-01-29 11:51:26.000000000 +0100 +@@ -18,11 +18,13 @@ + #include <linux/platform_device.h> + #include <linux/mtd/mtd.h> + #include <linux/mtd/map.h> ++#include <linux/mtd/xip.h> + #include <linux/mtd/partitions.h> + #include <linux/mtd/physmap.h> + #include <asm/io.h> + + #if defined (CONFIG_ARCH_HIPOX) ++#include <asm/arch/smc.h> + #include <asm/arch/hardware.h> + /* timing for NOR flash */ + #define STATIC_BUS_FLASH_CONFIG 0x4f1f3f0d /* fast ASIC settings, 70ns */ +@@ -78,6 +80,64 @@ + return 0; + } + ++#if defined (CONFIG_ARCH_HIPOX) ++static map_word __xipram physmap_hipox_read(struct map_info *map, unsigned long ofs) ++{ ++ map_word ret; ++ ++ // printk("%s:%d would wait for hipox_flash_mutex\n", __func__, __LINE__); ++ mutex_lock(&hipox_flash_mutex); ++ hipox_smc_request_pci_ad_31_0(); ++ ++ ret = inline_map_read(map, ofs); ++ ++ hipox_smc_release_pci_ad_31_0(); ++ mutex_unlock(&hipox_flash_mutex); ++ // printk("%s:%d hipox_flash_mutex unlocked\n", __func__, __LINE__); ++ ++ return ret; ++} ++ ++static void __xipram physmap_hipox_write(struct map_info *map, const map_word datum, unsigned long ofs) ++{ ++ // printk("%s:%d would wait for hipox_flash_mutex\n", __func__, __LINE__); ++ mutex_lock(&hipox_flash_mutex); ++ hipox_smc_request_pci_ad_31_0(); ++ ++ inline_map_write(map, datum, ofs); ++ ++ hipox_smc_release_pci_ad_31_0(); ++ mutex_unlock(&hipox_flash_mutex); ++ // printk("%s:%d hipox_flash_mutex unlocked\n", __func__, __LINE__); ++} ++ ++static void __xipram physmap_hipox_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len) ++{ ++ // printk("%s:%d would wait for hipox_flash_mutex\n", __func__, __LINE__); ++ mutex_lock(&hipox_flash_mutex); ++ hipox_smc_request_pci_ad_31_0(); ++ ++ inline_map_copy_from(map, to, from, len); ++ ++ hipox_smc_release_pci_ad_31_0(); ++ mutex_unlock(&hipox_flash_mutex); ++ // printk("%s:%d hipox_flash_mutex unlocked\n", __func__, __LINE__); ++} ++ ++static void __xipram physmap_hipox_copy_to(struct map_info *map, unsigned long to, const void *from, ssize_t len) ++{ ++ // printk("%s:%d would wait for hipox_flash_mutex\n", __func__, __LINE__); ++ mutex_lock(&hipox_flash_mutex); ++ hipox_smc_request_pci_ad_31_0(); ++ ++ inline_map_copy_to(map, to, from, len); ++ ++ hipox_smc_release_pci_ad_31_0(); ++ mutex_unlock(&hipox_flash_mutex); ++ // printk("%s:%d hipox_flash_mutex unlocked\n", __func__, __LINE__); ++} ++#endif /* CONFIG_ARCH_HIPOX */ ++ + static const char *rom_probe_types[] = { "cfi_probe", "jedec_probe", "map_rom", NULL }; + #ifdef CONFIG_MTD_PARTITIONS + static const char *part_probe_types[] = { "cmdlinepart", "RedBoot", NULL }; +@@ -95,8 +155,8 @@ + return -ENODEV; + + #if defined (CONFIG_ARCH_HIPOX) +-/* init timing for static memory controller */ +- writel(STATIC_BUS_FLASH_CONFIG, STATIC_CONTROL_BANK0); ++ /* init timing for static memory controller */ ++ writel(STATIC_BUS_FLASH_CONFIG, STATIC_CONTROL_BANK0); + #endif /* CONFIG_ARCH_HIPOX */ + + printk(KERN_NOTICE "physmap platform flash device: %.8llx at %.8llx\n", +@@ -134,6 +194,12 @@ + } + + simple_map_init(&info->map); ++#if defined (CONFIG_ARCH_HIPOX) ++ info->map.read = physmap_hipox_read; ++ info->map.write = physmap_hipox_write; ++ info->map.copy_from = physmap_hipox_copy_from; ++ info->map.copy_to = physmap_hipox_copy_to; ++#endif /* CONFIG_ARCH_HIPOX */ + + probe_type = rom_probe_types; + for (; info->mtd == NULL && *probe_type != NULL; probe_type++) +diff -Nurd linux-2.6.24.orig//drivers/mtd/nand/hipox_nand.c linux-2.6.24/drivers/mtd/nand/hipox_nand.c +--- linux-2.6.24.orig//drivers/mtd/nand/hipox_nand.c 2010-01-29 11:50:32.000000000 +0100 ++++ linux-2.6.24/drivers/mtd/nand/hipox_nand.c 2010-01-29 11:51:26.000000000 +0100 +@@ -21,9 +21,10 @@ + #include <linux/mtd/nand.h> + #include <linux/mtd/partitions.h> + #include <linux/delay.h> +-#include <linux/jiffies.h> ++#include <linux/mutex.h> + #include <asm/io.h> + #include <asm/arch/hardware.h> ++#include <asm/arch/smc.h> + #include <asm/sizes.h> + #include <asm/mach-types.h> + +@@ -59,50 +60,6 @@ + }; + #endif + +-static unsigned int timestamp = 0; +-/* +- * Request PCI_ARB to grant access to the STATIC core. +- */ +-static void request_bus(void) +-{ +- unsigned maxtries = 10; /* wait for maxtries jiffies at maximum */ +- +- /* set PCI_ARB request bit in Sysctrl_PCI_Ctrl1 */ +- writel(readl(SYS_CTRL_PCI_CTRL1) | (1UL << SYSCTL_PCI_CTRL1_SYSPCI_STATIC_REQ), SYS_CTRL_PCI_CTRL1); +- +- /* check if STATIC core has been granted access to the PCI bus +- and can use PCI_AD[31:0] pins */ +- for (;maxtries > 0; maxtries--) +- { +- if (readl(SYS_CTRL_PCI_STAT) & (1UL << SYSCTL_PCI_STAT_SYSPCI_STATIC_GNT)) +- break; +- udelay(10); +- } +- +- /* check for timeout granting access */ +- if (!(readl(SYS_CTRL_PCI_STAT) & (1UL << SYSCTL_PCI_STAT_SYSPCI_STATIC_GNT))) +- printk(KERN_WARNING "%s: timeout requesting access to PCI bus for static memory interface\n", __func__); +- +- timestamp = jiffies_to_msecs(get_jiffies_64()); +-} +- +-/* +- * Release access to PCI bus. +- */ +-static void release_bus(void) +-{ +- const unsigned int timeout = 100; /* ms */ +- unsigned int delta = jiffies_to_msecs(get_jiffies_64()) - timestamp; +- +- /* set PCI_ARB request bit in Sysctrl_PCI_Ctrl1 */ +- writel(readl(SYS_CTRL_PCI_CTRL1) & ~(1UL << SYSCTL_PCI_CTRL1_SYSPCI_STATIC_REQ), SYS_CTRL_PCI_CTRL1); +- +- if (delta > timeout) +- { +- printk(KERN_WARNING "%s: static memory interface blocked PCI bus for %u ms\n", __func__, delta); +- } +-} +- + /* + * Hardware specific access to control-lines + */ +@@ -111,14 +68,26 @@ + struct nand_chip *this = mtd->priv; + + if (ctrl & NAND_CTRL_CHANGE) { +- unsigned long IO_ADDR_W = (unsigned long) this->IO_ADDR_W; +- +- IO_ADDR_W = CONFIG_SYS_NAND_BASE; ++ unsigned long IO_ADDR_W = CONFIG_SYS_NAND_BASE; + + if (ctrl & NAND_NCE) +- writel(0x20000000, GPIO_A_OUTPUT_CLEAR); /* assert CS-NAND */ ++ { ++ if (0x20000000 & readl(GPIO_A_OUTPUT_VALUE)) ++ { ++ // printk("%s:%d would wait for hipox_flash_mutex\n", __func__, __LINE__); ++ mutex_lock(&hipox_flash_mutex); ++ writel(0x20000000, GPIO_A_OUTPUT_CLEAR); /* assert CS-NAND */ ++ } ++ } + else +- writel(0x20000000, GPIO_A_OUTPUT_SET); /* deassert CS-NAND */ ++ { ++ if (!(0x20000000 & readl(GPIO_A_OUTPUT_VALUE))) ++ { ++ writel(0x20000000, GPIO_A_OUTPUT_SET); /* deassert CS-NAND */ ++ mutex_unlock(&hipox_flash_mutex); ++ // printk("%s:%d hipox_flash_mutex unlocked\n", __func__, __LINE__); ++ } ++ } + + if (ctrl & NAND_CLE) + IO_ADDR_W = CONFIG_SYS_NAND_COMMAND_LATCH; +@@ -130,9 +99,9 @@ + + if (cmd != NAND_CMD_NONE) + { +- request_bus(); ++ hipox_smc_request_pci_ad_31_0(); + writeb(cmd, this->IO_ADDR_W); +- release_bus(); ++ hipox_smc_release_pci_ad_31_0(); + } + } + +@@ -146,9 +115,9 @@ + { + struct nand_chip *chip = mtd->priv; + uint8_t res; +- request_bus(); ++ hipox_smc_request_pci_ad_31_0(); + res = readb(chip->IO_ADDR_R); +- release_bus(); ++ hipox_smc_release_pci_ad_31_0(); + return res; + } + +@@ -163,9 +132,9 @@ + { + struct nand_chip *chip = mtd->priv; + u16 res; +- request_bus(); ++ hipox_smc_request_pci_ad_31_0(); + res = readw(chip->IO_ADDR_R); +- release_bus(); ++ hipox_smc_release_pci_ad_31_0(); + return res; + } + +@@ -182,10 +151,10 @@ + int i; + struct nand_chip *chip = mtd->priv; + +- request_bus(); ++ hipox_smc_request_pci_ad_31_0(); + for (i = 0; i < len; i++) + buf[i] = readb(chip->IO_ADDR_R); +- release_bus(); ++ hipox_smc_release_pci_ad_31_0(); + } + + /** +@@ -201,10 +170,10 @@ + int i; + struct nand_chip *chip = mtd->priv; + +- request_bus(); ++ hipox_smc_request_pci_ad_31_0(); + for (i = 0; i < |
