From: Michael Lauer Date: Wed, 30 Apr 2008 12:59:08 +0000 (+0000) Subject: merge of 'b84aeb3b3fcb9975cdaaafccc4ecbc7ca61c5312' X-Git-Tag: SlugOS5.3-beta~3223 X-Git-Url: http://code.vuplus.com/gitweb/?a=commitdiff_plain;h=164d14ccf62269636e0179140f24e551b04f9ca0;hp=1c27dfaed0066c9d710be48c34bd0885b32bceaf;p=vuplus_openembedded Merge ... 'b84aeb3b3fcb9975cdaaafccc4ecbc7ca61c5312' and 'ff99add05b70c6e96f011a1a27dd980a5380a7bf' --- diff --git a/MAINTAINERS b/MAINTAINERS index 3bab952..ee926f3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -97,7 +97,8 @@ Mail: jeremy.laine@bolloretelecom.eu Website: http://www.jerryweb.org/ Machines: mpc8313e-rdb Recipes: libexosip2, python-cheetah, python-django, python-pyopenssl, -Recipes: pump, squid, squidview +Recipes: pump, squid, squidview, hostap-daemon, wpa-supplicant, linux, +Recipes: u-boot Person: Joaquim Duran Mail: joaquinduran@adtelecom.es diff --git a/classes/kernel.bbclass b/classes/kernel.bbclass index a295c14..47bb4b9 100644 --- a/classes/kernel.bbclass +++ b/classes/kernel.bbclass @@ -471,7 +471,7 @@ do_deploy() { install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.bin package_stagefile_shell ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.bin - if [ -d "${D}lib" ]; then + if [ -d "${D}/lib" ]; then tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${PV}-${PR}-${MACHINE}.tgz -C ${D} lib fi diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf index 16c7b7d..eb83cbc 100644 --- a/conf/distro/angstrom-2008.1.conf +++ b/conf/distro/angstrom-2008.1.conf @@ -119,11 +119,11 @@ require conf/distro/include/preferred-gpe-versions-2.8.inc require conf/distro/include/preferred-e-versions.inc require conf/distro/include/preferred-xorg-versions-X11R7.3.inc -#avr32 only has patches for binutils 2.17 and gcc 4.2.1 in OE -PREFERRED_VERSION_gcc_avr32 = "4.2.1" -PREFERRED_VERSION_gcc-cross_avr32 = "4.2.1" -PREFERRED_VERSION_gcc-cross-sdk_avr32 = "4.2.1" -PREFERRED_VERSION_gcc-cross-initial_avr32 = "4.2.1" +#avr32 only has patches for binutils 2.17 and gcc 4.2.2 in OE +PREFERRED_VERSION_gcc_avr32 = "4.2.2" +PREFERRED_VERSION_gcc-cross_avr32 = "4.2.2" +PREFERRED_VERSION_gcc-cross-sdk_avr32 = "4.2.2" +PREFERRED_VERSION_gcc-cross-initial_avr32 = "4.2.2" PREFERRED_VERSION_binutils_avr32 = "2.17" PREFERRED_VERSION_binutils-cross_avr32 = "2.17" PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17" diff --git a/conf/distro/include/angstrom-uclibc.inc b/conf/distro/include/angstrom-uclibc.inc index 7e8e60d..7c713e6 100644 --- a/conf/distro/include/angstrom-uclibc.inc +++ b/conf/distro/include/angstrom-uclibc.inc @@ -16,8 +16,15 @@ FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-reg BUILD_OPTIMIZATION = "-Os" #Gcc will die with 'internal consistency error when using the above optimizations -FULL_OPTIMIZATION_avr32 = "" -BUILD_OPTIMIZATION_avr32 = "" +#with gcc-4.2.1-atmel.1.0.3 (and probably most other avr32 gcc ports). +#However, some packages require optimizations to compile (e.g. libmad). +#It appears the guilty optimization is "-frename-registers", leaving that one +#out allows the build to proceed normally. -fexpensive-optimizations may be OK, +#it was removed while debugging an issue that ultimately turned out to be due +#to the ICE fixed by gcc-pr32889.patch. It needs to be tested again. +#Note that this testing was done without the gcc-pr32889.patch. +FULL_OPTIMIZATION_avr32 = "-Os -fomit-frame-pointer" + CXXFLAGS += "-fvisibility-inlines-hidden" diff --git a/conf/machine/mpc8313e-rdb.conf b/conf/machine/mpc8313e-rdb.conf index a2c37db..83167b1 100644 --- a/conf/machine/mpc8313e-rdb.conf +++ b/conf/machine/mpc8313e-rdb.conf @@ -11,7 +11,7 @@ MACHINE_FEATURES = "kernel26 usbhost pci ext2 uboot" KERNEL_IMAGETYPE = "uImage" -PREFERRED_VERSION_u-boot = "1.3.1" +PREFERRED_VERSION_u-boot = "1.3.2" UBOOT_MACHINE = "MPC8313ERDB_33_config" UBOOT_ENTRYPOINT = "0" UBOOT_LOADADDRESS = "0" diff --git a/packages/binutils/binutils-2.17/binutils-2.17.atmel.1.2.6.patch.bz2 b/packages/binutils/binutils-2.17/binutils-2.17.atmel.1.2.6.patch.bz2 new file mode 100644 index 0000000..583ea40 Binary files /dev/null and b/packages/binutils/binutils-2.17/binutils-2.17.atmel.1.2.6.patch.bz2 differ diff --git a/packages/binutils/binutils-avr32.inc b/packages/binutils/binutils-avr32.inc new file mode 100644 index 0000000..e74fb51 --- /dev/null +++ b/packages/binutils/binutils-avr32.inc @@ -0,0 +1,31 @@ +# Extra tasks required when using Atmel's patches to binutils +# See http://avr32linux.org/twiki/bin/view/Main/BinutilsPatches for +# more information + + +do_avr32_reconf () { + if test ${TARGET_ARCH} == avr32; then + (cd ${S} && autoconf-2.13) || die "Error running autoconf" + for dir in bfd opcodes binutils ld; do + (cd "${S}/$dir" && + aclocal-1.9 && + autoconf && + automake-1.9 && + autoheader) || die "Error reconfiguring $dir" + done + fi +} + + +do_avr32_configure_bfd () { + if test ${TARGET_ARCH} == avr32; then + (cd ${B} && make configure-bfd) || die "Error running 'make configure-bfd'" + (cd ${B}/bfd && make headers) || die "Error running 'make headers'" + fi +} + + + +addtask avr32_reconf after do_patch before do_configure +addtask avr32_configure_bfd after do_configure before do_compile + diff --git a/packages/binutils/binutils.inc b/packages/binutils/binutils.inc index 684cf54..49d3aea 100644 --- a/packages/binutils/binutils.inc +++ b/packages/binutils/binutils.inc @@ -67,6 +67,11 @@ export CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}" do_configure () { (cd ${S}; gnu-configize) || die "Failed to run gnu-configize" + + # Fix for issues when system's texinfo version >= 4.10 + # (See https://bugzilla.redhat.com/show_bug.cgi?id=345621) + sed -i -e "s@egrep 'texinfo.*'@egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[4-9]|4.[1-9][0-9]+|[5-9])'@" '${S}/configure' + oe_runconf # # must prime config.cache to ensure the build of libiberty diff --git a/packages/binutils/binutils_2.17.bb b/packages/binutils/binutils_2.17.bb index 0696a24..e721cb4 100644 --- a/packages/binutils/binutils_2.17.bb +++ b/packages/binutils/binutils_2.17.bb @@ -1,6 +1,7 @@ require binutils.inc +require binutils-avr32.inc -PR = "r4" +PR = "r5" SRC_URI = \ "http://ftp.gnu.org/gnu/binutils/binutils-${PV}.tar.bz2 \ @@ -18,8 +19,13 @@ SRC_URI += "\ file://300-012_check_ldrunpath_length.patch;patch=1 \ file://300-001_ld_makefile_patch.patch;patch=1 \ file://400-mips-ELF_MAXPAGESIZE-4K.patch;patch=1 \ - file://500-avr32-atmel.1.3.0.patch;patch=1 \ - file://501-avr32-fix-pool-alignment.patch;patch=1 \ +" +# removed in favor of the atmel 1.2.6 patch which is supposedly newer (yes) +# file://500-avr32-atmel.1.3.0.patch;patch=1 \ +# file://501-avr32-fix-pool-alignment.patch;patch=1 \ + +SRC_URI_append_avr32 = "\ + file://binutils-2.17.atmel.1.2.6.patch.bz2;patch=1 \ " # Zecke's OSX fixes diff --git a/packages/gcc/gcc-4.2.2.inc b/packages/gcc/gcc-4.2.2.inc index 02fe116..1392b3e 100644 --- a/packages/gcc/gcc-4.2.2.inc +++ b/packages/gcc/gcc-4.2.2.inc @@ -40,6 +40,13 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://intermask-bigendian.patch;patch=1 \ " + +SRC_URI_append_avr32 = " \ + file://gcc-4.2.2.atmel.1.0.8.patch.bz2;patch=1 \ + file://901-avr32-no-cond-exec-before-reload-by-default.patch;patch=1 \ +" + + SRC_URI_append_ep93xx = " \ file://arm-crunch-saveregs.patch;patch=1 \ file://arm-crunch-20000320.patch;patch=1 \ @@ -71,4 +78,4 @@ JAVA = "" EXTRA_OECONF_BASE = "--disable-libssp --disable-bootstrap --disable-libgomp --disable-libmudflap" -ARM_INSTRUCTION_SET = "arm" \ No newline at end of file +ARM_INSTRUCTION_SET = "arm" diff --git a/packages/gcc/gcc-4.2.2/901-avr32-no-cond-exec-before-reload-by-default.patch b/packages/gcc/gcc-4.2.2/901-avr32-no-cond-exec-before-reload-by-default.patch new file mode 100644 index 0000000..ab55ea4 --- /dev/null +++ b/packages/gcc/gcc-4.2.2/901-avr32-no-cond-exec-before-reload-by-default.patch @@ -0,0 +1,13 @@ +Index: gcc-4.2.2/gcc/config/avr32/avr32.c +=================================================================== +--- gcc-4.2.2.orig/gcc/config/avr32/avr32.c 2008-04-08 10:42:47.000000000 +0200 ++++ gcc-4.2.2/gcc/config/avr32/avr32.c 2008-04-08 10:43:33.000000000 +0200 +@@ -161,7 +161,7 @@ + /* Set default target_flags. */ + #undef TARGET_DEFAULT_TARGET_FLAGS + #define TARGET_DEFAULT_TARGET_FLAGS \ +- (MASK_HAS_ASM_ADDR_PSEUDOS | MASK_MD_REORG_OPTIMIZATION | MASK_COND_EXEC_BEFORE_RELOAD) ++ (MASK_HAS_ASM_ADDR_PSEUDOS | MASK_MD_REORG_OPTIMIZATION) + + void + avr32_optimization_options (int level, diff --git a/packages/gcc/gcc-4.2.2/gcc-4.2.2.atmel.1.0.8.patch.bz2 b/packages/gcc/gcc-4.2.2/gcc-4.2.2.atmel.1.0.8.patch.bz2 new file mode 100644 index 0000000..4be097b Binary files /dev/null and b/packages/gcc/gcc-4.2.2/gcc-4.2.2.atmel.1.0.8.patch.bz2 differ diff --git a/packages/gdb/gdb-avr32.inc b/packages/gdb/gdb-avr32.inc new file mode 100644 index 0000000..0c0255f --- /dev/null +++ b/packages/gdb/gdb-avr32.inc @@ -0,0 +1,32 @@ +# Perform tasks required to use Atmel's AVR32 patches +# See http://avr32linux.org/twiki/bin/view/Main/GDBPatches for more info + + +do_avr32_reconf () { + if test ${TARGET_ARCH} == "avr32"; then + (cd ${S} && autoconf) || \ + die "failure running autoconf in top-level gdb" + + (cd ${S}/bfd && autoreconf) || \ + die "failure running autoreconf in bfd/" + + (cd ${S}/opcodes && autoreconf) || \ + die "failure running autoreconf in opcodes/" + fi + +} + + + +do_avr32_configure_bfd () { + if test ${TARGET_ARCH} == "avr32"; then + (cd ${B} && make configure-bfd) || die "Error running configure-bfd" + (cd ${B}/bfd && make headers) || \ + die "error running 'make headers' in bfd" + fi +} + + +addtask avr32_reconf after do_patch before do_configure +addtask avr32_configure_bfd after do_configure before do_compile + diff --git a/packages/gdb/gdb-cross.inc b/packages/gdb/gdb-cross.inc index 480cce4..6d4c3d1 100644 --- a/packages/gdb/gdb-cross.inc +++ b/packages/gdb/gdb-cross.inc @@ -10,6 +10,12 @@ do_configure () { # override this function to avoid the autoconf/automake/aclocal/autoheader # calls for now (cd ${S} && gnu-configize) || die "failure in running gnu-configize" + + # Fix for issues when system's texinfo version >= 4.10 + # (See https://bugzilla.redhat.com/show_bug.cgi?id=345621) + sed -i -e "s@egrep 'texinfo.*'@egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[4-9]|4.[1-9][0-9]+|[5-9])'@" '${S}/configure' + + oe_runconf } diff --git a/packages/linux/linux-omap2-git/beagleboard/defconfig b/packages/linux/linux-omap2-git/beagleboard/defconfig index 9a66d7a..135e9c4 100644 --- a/packages/linux/linux-omap2-git/beagleboard/defconfig +++ b/packages/linux/linux-omap2-git/beagleboard/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.25-omap1 -# Thu Apr 24 21:02:00 2008 +# Wed Apr 30 11:44:55 2008 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -941,9 +941,10 @@ CONFIG_SSB_POSSIBLE=y # CONFIG_VIDEO_DEV=y CONFIG_VIDEO_V4L2_COMMON=y -# CONFIG_VIDEO_V4L1 is not set +CONFIG_VIDEO_ALLOW_V4L1=y CONFIG_VIDEO_V4L1_COMPAT=y CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_V4L1=y CONFIG_VIDEO_CAPTURE_DRIVERS=y # CONFIG_VIDEO_ADV_DEBUG is not set # CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set @@ -973,11 +974,21 @@ CONFIG_VIDEO_WM8775=m # # Video decoders # +# CONFIG_VIDEO_BT819 is not set +# CONFIG_VIDEO_BT856 is not set +# CONFIG_VIDEO_BT866 is not set +# CONFIG_VIDEO_KS0127 is not set # CONFIG_VIDEO_OV7670 is not set # CONFIG_VIDEO_TCM825X is not set # CONFIG_VIDEO_OV9640 is not set +# CONFIG_VIDEO_SAA7110 is not set +# CONFIG_VIDEO_SAA7111 is not set +# CONFIG_VIDEO_SAA7114 is not set CONFIG_VIDEO_SAA711X=m +# CONFIG_VIDEO_SAA717X is not set +# CONFIG_VIDEO_SAA7191 is not set # CONFIG_VIDEO_TVP5150 is not set +# CONFIG_VIDEO_VPX3220 is not set # # Video and audio decoders @@ -993,6 +1004,9 @@ CONFIG_VIDEO_CX2341X=m # Video encoders # # CONFIG_VIDEO_SAA7127 is not set +# CONFIG_VIDEO_SAA7185 is not set +# CONFIG_VIDEO_ADV7170 is not set +# CONFIG_VIDEO_ADV7175 is not set # # Video improvement chips @@ -1000,22 +1014,39 @@ CONFIG_VIDEO_CX2341X=m # CONFIG_VIDEO_UPD64031A is not set # CONFIG_VIDEO_UPD64083 is not set CONFIG_VIDEO_VIVI=m +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_CPIA2 is not set CONFIG_VIDEO_SAA5246A=m CONFIG_VIDEO_SAA5249=m +# CONFIG_TUNER_3036 is not set +# CONFIG_VIDEO_AU0828 is not set CONFIG_V4L_USB_DRIVERS=y CONFIG_VIDEO_PVRUSB2=m CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR=y CONFIG_VIDEO_PVRUSB2_ONAIR_USB2=y CONFIG_VIDEO_PVRUSB2_SYSFS=y +# CONFIG_VIDEO_PVRUSB2_DVB is not set # CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set CONFIG_VIDEO_EM28XX=m CONFIG_VIDEO_EM28XX_ALSA=m +# CONFIG_VIDEO_EM28XX_DVB is not set CONFIG_VIDEO_USBVISION=m +# CONFIG_USB_VICAM is not set +# CONFIG_USB_IBMCAM is not set +# CONFIG_USB_KONICAWC is not set +# CONFIG_USB_QUICKCAM_MESSENGER is not set CONFIG_USB_ET61X251=m +# CONFIG_VIDEO_OVCAMCHIP is not set +# CONFIG_USB_W9968CF is not set +# CONFIG_USB_OV511 is not set +# CONFIG_USB_SE401 is not set CONFIG_USB_SN9C102=m +# CONFIG_USB_STV680 is not set CONFIG_USB_ZC0301=m +# CONFIG_USB_PWC is not set CONFIG_USB_ZR364XX=m CONFIG_USB_STKWEBCAM=m +# CONFIG_SOC_CAMERA is not set # CONFIG_RADIO_ADAPTERS is not set CONFIG_DVB_CORE=m CONFIG_DVB_CORE_ATTACH=y @@ -1094,6 +1125,7 @@ CONFIG_DVB_DIB3000MB=m CONFIG_DVB_DIB3000MC=m CONFIG_DVB_DIB7000M=m CONFIG_DVB_DIB7000P=m +# CONFIG_DVB_TDA10048 is not set # # DVB-C (cable) frontends @@ -1112,6 +1144,7 @@ CONFIG_DVB_OR51132=m CONFIG_DVB_BCM3510=m CONFIG_DVB_LGDT330X=m CONFIG_DVB_S5H1409=m +# CONFIG_DVB_AU8522 is not set # # Tuners/PLL support @@ -1126,11 +1159,13 @@ CONFIG_DVB_TUNER_MT2266=m CONFIG_DVB_TUNER_MT2131=m CONFIG_DVB_TUNER_DIB0070=m CONFIG_DVB_TUNER_XC5000=m +# CONFIG_DVB_TUNER_ITD1000 is not set # # Miscellaneous devices # CONFIG_DVB_LNBP21=m +# CONFIG_DVB_ISL6405 is not set CONFIG_DVB_ISL6421=m CONFIG_DVB_TUA6100=m CONFIG_VIDEO_TUNER=m @@ -1263,10 +1298,6 @@ CONFIG_SND_USB_CAIAQ=m CONFIG_SND_SOC=y # -# SoC Audio support for SuperH -# - -# # ALSA SoC audio for Freescale SOCs # @@ -1312,7 +1343,7 @@ CONFIG_USB_SUSPEND=y # # USB Host Controller Drivers # -CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_HCD=m CONFIG_OMAP_EHCI_PHY_MODE=y # CONFIG_OMAP_EHCI_TLL_MODE is not set CONFIG_USB_EHCI_ROOT_HUB_TT=y @@ -1434,7 +1465,7 @@ CONFIG_USB_LED=m # CONFIG_USB_IDMOUSE is not set # CONFIG_USB_FTDI_ELAN is not set # CONFIG_USB_APPLEDISPLAY is not set -CONFIG_USB_SISUSBVGA=y +CONFIG_USB_SISUSBVGA=m CONFIG_USB_SISUSBVGA_CON=y # CONFIG_USB_LD is not set # CONFIG_USB_TRANCEVIBRATOR is not set @@ -1638,7 +1669,6 @@ CONFIG_NFS_FS=y CONFIG_NFS_V3=y # CONFIG_NFS_V3_ACL is not set CONFIG_NFS_V4=y -# CONFIG_NFS_DIRECTIO is not set # CONFIG_NFSD is not set CONFIG_ROOT_NFS=y CONFIG_LOCKD=y diff --git a/packages/linux/linux-omap2-git/beagleboard/usb-timout.patch b/packages/linux/linux-omap2-git/beagleboard/usb-timout.patch new file mode 100644 index 0000000..2d1797c --- /dev/null +++ b/packages/linux/linux-omap2-git/beagleboard/usb-timout.patch @@ -0,0 +1,11 @@ +--- /tmp/ehci-hub.c 2008-04-30 11:41:59.381876290 +0200 ++++ git/drivers/usb/host/ehci-hub.c 2008-04-30 11:42:20.522875367 +0200 +@@ -734,7 +734,7 @@ + * this bit; seems too long to spin routinely... + */ + retval = handshake(ehci, status_reg, +- PORT_RESET, 0, 750); ++ PORT_RESET, 0, 1250); + if (retval != 0) { + ehci_err (ehci, "port %d reset error %d\n", + wIndex + 1, retval); diff --git a/packages/linux/linux-omap2_git.bb b/packages/linux/linux-omap2_git.bb index f8c50f7..4a3c3fa 100644 --- a/packages/linux/linux-omap2_git.bb +++ b/packages/linux/linux-omap2_git.bb @@ -2,16 +2,17 @@ require linux-omap.inc FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-omap2-git/${MACHINE}" -SRCREV = "b1224e0086dc0b27a5af1e7b4f59709521569060" +SRCREV = "59586cd959b31f91f29cf96c1d3f8ff52c3c0607" PV = "2.6.25+git${SRCREV}" -PR = "r5" +PR = "r6" SRC_URI = "git://source.mvista.com/git/linux-omap-2.6.git;protocol=git \ - file://defconfig" + file://defconfig" SRC_URI_append_beagleboard = " file://no-harry-potter.diff;patch=1 \ + file://usb-timout.patch;patch=1 \ " COMPATIBLE_MACHINE = "omap2430sdp|omap2420h4|beagleboard" diff --git a/packages/madwifi/madwifi-ng_r1844-20061208.bb b/packages/madwifi/madwifi-ng_r1844-20061208.bb deleted file mode 100644 index 42d8cca..0000000 --- a/packages/madwifi/madwifi-ng_r1844-20061208.bb +++ /dev/null @@ -1,3 +0,0 @@ -PR = "r0" - -require madwifi-ng_r.inc diff --git a/packages/madwifi/madwifi-ng_r2100-20070210.bb b/packages/madwifi/madwifi-ng_r2100-20070210.bb deleted file mode 100644 index 42d8cca..0000000 --- a/packages/madwifi/madwifi-ng_r2100-20070210.bb +++ /dev/null @@ -1,3 +0,0 @@ -PR = "r0" - -require madwifi-ng_r.inc diff --git a/packages/madwifi/madwifi-ng_r2156-20070225.bb b/packages/madwifi/madwifi-ng_r2156-20070225.bb deleted file mode 100644 index 42d8cca..0000000 --- a/packages/madwifi/madwifi-ng_r2156-20070225.bb +++ /dev/null @@ -1,3 +0,0 @@ -PR = "r0" - -require madwifi-ng_r.inc diff --git a/packages/madwifi/madwifi-ng_r2182-20070308.bb b/packages/madwifi/madwifi-ng_r2182-20070308.bb deleted file mode 100644 index 42d8cca..0000000 --- a/packages/madwifi/madwifi-ng_r2182-20070308.bb +++ /dev/null @@ -1,3 +0,0 @@ -PR = "r0" - -require madwifi-ng_r.inc diff --git a/packages/madwifi/madwifi-ng_r2187-20070309.bb b/packages/madwifi/madwifi-ng_r2187-20070309.bb deleted file mode 100644 index 42d8cca..0000000 --- a/packages/madwifi/madwifi-ng_r2187-20070309.bb +++ /dev/null @@ -1,3 +0,0 @@ -PR = "r0" - -require madwifi-ng_r.inc diff --git a/packages/madwifi/madwifi-ng_r2518-20070626.bb b/packages/madwifi/madwifi-ng_r2518-20070626.bb deleted file mode 100644 index 9f042ac..0000000 --- a/packages/madwifi/madwifi-ng_r2518-20070626.bb +++ /dev/null @@ -1,7 +0,0 @@ -PR = "r0" - -# Disable stripping of kernel modules, since this action strips too -# much out, and the resulting module won't load. -INHIBIT_PACKAGE_STRIP = "1" - -require madwifi-ng_r.inc diff --git a/packages/madwifi/madwifi-ng_r2702-20070903.bb b/packages/madwifi/madwifi-ng_r2702-20070903.bb deleted file mode 100644 index 627d4f5..0000000 --- a/packages/madwifi/madwifi-ng_r2702-20070903.bb +++ /dev/null @@ -1,13 +0,0 @@ -# Bitbake recipe for the madwifi-ng driver - -# Don't use this unless you know what you're doing -- this version does -# *NOT* build on BE kernels. - -# Disable stripping of kernel modules, since this action strips too -# much out, and the resulting module won't load. -INHIBIT_PACKAGE_STRIP = "1" - -require madwifi-ng_r.inc - -# PR set after the include, to override what's set in the included file. -PR = "r0" diff --git a/packages/madwifi/madwifi-ng_r3314-20080131.bb b/packages/madwifi/madwifi-ng_r3314-20080131.bb index d47a095..fb5cde0 100644 --- a/packages/madwifi/madwifi-ng_r3314-20080131.bb +++ b/packages/madwifi/madwifi-ng_r3314-20080131.bb @@ -1,8 +1,5 @@ # Bitbake recipe for the madwifi-ng driver -DEFAULT_PREFERENCE = "-1" -DEFAULT_PREFERENCE_ixp4xx = "1" - # Disable stripping of kernel modules, since this action strips too # much out, and the resulting module won't load. INHIBIT_PACKAGE_STRIP = "1" diff --git a/packages/meta/slugos-packages.bb b/packages/meta/slugos-packages.bb index 526f49b..80be619 100644 --- a/packages/meta/slugos-packages.bb +++ b/packages/meta/slugos-packages.bb @@ -5,7 +5,7 @@ DESCRIPTION = "Packages that are compatible with the SlugOS firmware" HOMEPAGE = "http://www.nslu2-linux.org" LICENSE = "MIT" -PR = "r51" +PR = "r53" CONFLICTS = "db3" COMPATIBLE_MACHINE = "nslu2|ixp4xx" @@ -50,6 +50,7 @@ SLUGOS_PACKAGES = "\ bluez-utils \ bluez-hcidump \ bogofilter \ + bonnie++ \ boost \ bridge-utils \ bzip2 \ @@ -103,6 +104,7 @@ SLUGOS_PACKAGES = "\ hdparm \ ifupdown \ inetutils \ + iozone3 \ iperf \ ipkg-utils \ iptables \ diff --git a/packages/netbase/netbase/mpc8313e-rdb/.mtn2git_empty b/packages/netbase/netbase/mpc8313e-rdb/.mtn2git_empty new file mode 100644 index 0000000..e69de29 diff --git a/packages/netbase/netbase/mpc8313e-rdb/interfaces b/packages/netbase/netbase/mpc8313e-rdb/interfaces new file mode 100644 index 0000000..64d65e3 --- /dev/null +++ b/packages/netbase/netbase/mpc8313e-rdb/interfaces @@ -0,0 +1,16 @@ +# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8) + +# The loopback interface +auto lo +iface lo inet loopback + +# Wired interface +auto eth1 +iface eth1 inet dhcp + +# Wireless interface +auto ath0 +iface ath0 inet static + address 192.168.99.1 + netmask 255.255.255.0 + diff --git a/packages/opkg/opkg_svn.bb b/packages/opkg/opkg_svn.bb index 81401dd..58aaf74 100644 --- a/packages/opkg/opkg_svn.bb +++ b/packages/opkg/opkg_svn.bb @@ -1,6 +1,6 @@ require opkg.inc -PR = "r3" +PR = "r4" PACKAGES =+ "libopkg-dev libopkg" @@ -12,7 +12,7 @@ FILES_libopkg = "${libdir}/*.so.*" OPKG_INIT_POSITION = "98" OPKG_INIT_POSITION_slugos = "41" -pkg_postinst_opkg () { +pkg_postinst_${PN} () { #!/bin/sh if [ "x$D" != "x" ]; then install -d ${IMAGE_ROOTFS}/${sysconfdir}/rcS.d @@ -26,7 +26,7 @@ fi update-alternatives --install ${bindir}/opkg opkg ${bindir}/opkg-cl 100 } -pkg_postrm_opkg () { +pkg_postrm_${PN} () { #!/bin/sh update-alternatives --remove opkg ${bindir}/opkg-cl } diff --git a/packages/u-boot/u-boot-1.3.2/.mtn2git_empty b/packages/u-boot/u-boot-1.3.2/.mtn2git_empty new file mode 100644 index 0000000..e69de29 diff --git a/packages/u-boot/u-boot-1.3.2/mpc8313e-rdb-autoboot.patch b/packages/u-boot/u-boot-1.3.2/mpc8313e-rdb-autoboot.patch new file mode 100644 index 0000000..ffca5a3 --- /dev/null +++ b/packages/u-boot/u-boot-1.3.2/mpc8313e-rdb-autoboot.patch @@ -0,0 +1,12 @@ +diff -urN u-boot-1.3.1.orig/include/configs/MPC8313ERDB.h u-boot-1.3.1/include/configs/MPC8313ERDB.h +--- u-boot-1.3.1.orig/include/configs/MPC8313ERDB.h 2007-12-06 10:21:19.000000000 +0100 ++++ u-boot-1.3.1/include/configs/MPC8313ERDB.h 2008-01-31 17:38:10.000000000 +0100 +@@ -522,7 +522,7 @@ + #define CONFIG_FDTFILE mpc8313erdb.dtb + + #define CONFIG_LOADADDR 200000 /* default location for tftp and bootm */ +-#define CONFIG_BOOTDELAY -1 /* -1 disables auto-boot */ ++#define CONFIG_BOOTDELAY 3 /* autoboot after 3 seconds */ + #define CONFIG_BAUDRATE 115200 + + #define XMK_STR(x) #x diff --git a/packages/u-boot/u-boot-1.3.2/mpc8313e-rdb-mtdparts.patch b/packages/u-boot/u-boot-1.3.2/mpc8313e-rdb-mtdparts.patch new file mode 100644 index 0000000..9071dfa --- /dev/null +++ b/packages/u-boot/u-boot-1.3.2/mpc8313e-rdb-mtdparts.patch @@ -0,0 +1,35 @@ +diff -urN u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h u-boot-1.3.2/include/configs/MPC8313ERDB.h +--- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h 2008-03-09 16:20:02.000000000 +0100 ++++ u-boot-1.3.2/include/configs/MPC8313ERDB.h 2008-04-21 19:20:51.000000000 +0200 +@@ -179,7 +179,7 @@ + #define CFG_INIT_SP_OFFSET CFG_GBL_DATA_OFFSET + + /* CFG_MONITOR_LEN must be a multiple of CFG_ENV_SECT_SIZE */ +-#define CFG_MONITOR_LEN (256 * 1024) /* Reserve 256 kB for Mon */ ++#define CFG_MONITOR_LEN (384 * 1024) /* Reserve 384 kB for Mon */ + #define CFG_MALLOC_LEN (512 * 1024) /* Reserved for malloc */ + + /* +@@ -354,6 +354,7 @@ + #define CONFIG_CMD_PING + #define CONFIG_CMD_DHCP + #define CONFIG_CMD_I2C ++#define CONFIG_CMD_JFFS2 + #define CONFIG_CMD_MII + #define CONFIG_CMD_DATE + #define CONFIG_CMD_PCI +@@ -365,6 +366,14 @@ + + #define CONFIG_CMDLINE_EDITING 1 + ++/* ++ * JFFS2 partitions (mtdparts command line support) ++ */ ++#define CONFIG_JFFS2_CMDLINE ++#define CONFIG_JFFS2_NAND ++#define MTDIDS_DEFAULT "nor0=physmap-flash.0,nand0=nand0" ++#define MTDPARTS_DEFAULT "mtdparts=physmap-flash.0:384k(uboot),64k(env)" ++ + + /* + * Miscellaneous configurable options diff --git a/packages/u-boot/u-boot-1.3.2/mpc8313e-rdb-nand.patch b/packages/u-boot/u-boot-1.3.2/mpc8313e-rdb-nand.patch new file mode 100644 index 0000000..e653b75 --- /dev/null +++ b/packages/u-boot/u-boot-1.3.2/mpc8313e-rdb-nand.patch @@ -0,0 +1,895 @@ +diff -urN u-boot-1.3.1.orig/board/freescale/mpc8313erdb/Makefile u-boot-1.3.1/board/freescale/mpc8313erdb/Makefile +--- u-boot-1.3.1.orig/board/freescale/mpc8313erdb/Makefile 2007-12-06 10:21:19.000000000 +0100 ++++ u-boot-1.3.1/board/freescale/mpc8313erdb/Makefile 2008-01-31 17:35:43.000000000 +0100 +@@ -25,7 +25,7 @@ + + LIB = $(obj)lib$(BOARD).a + +-COBJS := $(BOARD).o sdram.o ++COBJS := $(BOARD).o sdram.o nand.o + + SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) + OBJS := $(addprefix $(obj),$(COBJS)) +diff -urN u-boot-1.3.1.orig/board/freescale/mpc8313erdb/nand.c u-boot-1.3.1/board/freescale/mpc8313erdb/nand.c +--- u-boot-1.3.1.orig/board/freescale/mpc8313erdb/nand.c 1970-01-01 01:00:00.000000000 +0100 ++++ u-boot-1.3.1/board/freescale/mpc8313erdb/nand.c 2008-01-31 17:35:26.000000000 +0100 +@@ -0,0 +1,868 @@ ++/* ++ * Copyright (C) Freescale Semiconductor, Inc. 2006. ++ * ++ * Initialized by Nick.Spence@freescale.com ++ * Wilson.Lo@freescale.com ++ * ++ * See file CREDITS for list of people who contributed to this ++ * project. ++ * ++ * 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 ++ ++#if defined(CONFIG_CMD_NAND) ++#if defined(CFG_NAND_LEGACY) ++ #error "U-Boot legacy NAND commands not supported." ++#else ++ ++#include ++#include ++#include ++ ++#undef CFG_FCM_DEBUG ++#define CFG_FCM_DEBUG_LVL 1 ++#ifdef CFG_FCM_DEBUG ++#define FCM_DEBUG(n, args...) \ ++ do { \ ++ if (n <= (CFG_FCM_DEBUG_LVL + 0)) \ ++ printf(args); \ ++ } while(0) ++#else /* CONFIG_FCM_DEBUG */ ++#define FCM_DEBUG(n, args...) do { } while(0) ++#endif ++ ++#define MIN(x, y) ((x < y) ? x : y) ++ ++#define ERR_BYTE 0xFF /* Value returned for read bytes when read failed */ ++ ++#define FCM_TIMEOUT_USECS 100000 /* Maximum number of uSecs to wait for FCM */ ++ ++/* Private structure holding NAND Flash device specific information */ ++struct fcm_nand { ++ int bank; /* Chip select bank number */ ++ unsigned int base; /* Chip select base address */ ++ int pgs; /* NAND page size */ ++ int oobbuf; /* Pointer to OOB block */ ++ unsigned int page; /* Last page written to / read from */ ++ unsigned int fmr; /* FCM Flash Mode Register value */ ++ unsigned int mdr; /* UPM/FCM Data Register value */ ++ unsigned int use_mdr; /* Non zero if the MDR is to be set */ ++ u_char *addr; /* Address of assigned FCM buffer */ ++ unsigned int read_bytes; /* Number of bytes read during command */ ++ unsigned int index; /* Pointer to next byte to 'read' */ ++ unsigned int req_bytes; /* Number of bytes read if command ok */ ++ unsigned int req_index; /* New read index if command ok */ ++ unsigned int status; /* status read from LTESR after last op*/ ++}; ++ ++ ++/* These map to the positions used by the FCM hardware ECC generator */ ++ ++/* Small Page FLASH with FMR[ECCM] = 0 */ ++static struct nand_oobinfo fcm_oob_sp_eccm0 = { /* TODO */ ++ .useecc = MTD_NANDECC_AUTOPL_USR, /* MTD_NANDECC_PLACEONLY, */ ++ .eccbytes = 3, ++ .eccpos = {6, 7, 8}, ++ .oobfree = { {0, 5}, {9, 7} } ++}; ++ ++/* Small Page FLASH with FMR[ECCM] = 1 */ ++static struct nand_oobinfo fcm_oob_sp_eccm1 = { /* TODO */ ++ .useecc = MTD_NANDECC_AUTOPL_USR, /* MTD_NANDECC_PLACEONLY, */ ++ .eccbytes = 3, ++ .eccpos = {8, 9, 10}, ++ .oobfree = { {0, 5}, {6, 2}, {11, 5} } ++}; ++ ++/* Large Page FLASH with FMR[ECCM] = 0 */ ++static struct nand_oobinfo fcm_oob_lp_eccm0 = { ++ .useecc = MTD_NANDECC_AUTOPL_USR, /* MTD_NANDECC_PLACEONLY, */ ++ .eccbytes = 12, ++ .eccpos = {6, 7, 8, 22, 23, 24, 38, 39, 40, 54, 55, 56}, ++ .oobfree = { {1, 5}, {9, 13}, {25, 13}, {41, 13}, {57, 7} } ++}; ++ ++/* Large Page FLASH with FMR[ECCM] = 1 */ ++static struct nand_oobinfo fcm_oob_lp_eccm1 = { ++ .useecc = MTD_NANDECC_AUTOPL_USR, /* MTD_NANDECC_PLACEONLY, */ ++ .eccbytes = 12, ++ .eccpos = {8, 9, 10, 24, 25, 26, 40, 41, 42, 56, 57, 58}, ++ .oobfree = { {1, 7}, {11, 13}, {27, 13}, {43, 13}, {59, 5} } ++}; ++ ++/* ++ * execute FCM command and wait for it to complete ++ */ ++static int fcm_run_command(struct mtd_info *mtd) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ long long end_tick; ++ ++ /* Setup the FMR[OP] to execute without write protection */ ++ lbc->fmr = fcm->fmr | 3; ++ if (fcm->use_mdr) ++ lbc->mdr = fcm->mdr; ++ ++ FCM_DEBUG(5,"fcm_run_command: fmr= %08X fir= %08X fcr= %08X\n", ++ lbc->fmr, lbc->fir, lbc->fcr); ++ FCM_DEBUG(5,"fcm_run_command: fbar=%08X fpar=%08X fbcr=%08X bank=%d\n", ++ lbc->fbar, lbc->fpar, lbc->fbcr, fcm->bank); ++ ++ /* clear event registers */ ++ lbc->lteatr = 0; ++ lbc->ltesr |= (LTESR_FCT | LTESR_PAR | LTESR_CC); ++ ++ /* execute special operation */ ++ lbc->lsor = fcm->bank; ++ ++ /* wait for FCM complete flag or timeout */ ++ fcm->status = 0; ++ end_tick = usec2ticks(FCM_TIMEOUT_USECS) + get_ticks(); ++ ++ while (end_tick > get_ticks()) { ++ if (lbc->ltesr & LTESR_CC) { ++ fcm->status = lbc->ltesr & ++ (LTESR_FCT | LTESR_PAR | LTESR_CC); ++ break; ++ } ++ } ++ ++ /* store mdr value in case it was needed */ ++ if (fcm->use_mdr) ++ fcm->mdr = lbc->mdr; ++ ++ fcm->use_mdr = 0; ++ ++ FCM_DEBUG(5,"fcm_run_command: stat=%08X mdr= %08X fmr= %08X\n", ++ fcm->status, fcm->mdr, lbc->fmr); ++ ++ /* if the operation completed ok then set the read buffer pointers */ ++ if (fcm->status == LTESR_CC) { ++ fcm->read_bytes = fcm->req_bytes; ++ fcm->index = fcm->req_index; ++ return 0; ++ } ++ ++ return -1; ++} ++ ++/* ++ * Set up the FCM hardware block and page address fields, and the fcm ++ * structure addr field to point to the correct FCM buffer in memory ++ */ ++static void set_addr(struct mtd_info *mtd, int column, int page_addr, int oob) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ int buf_num; ++ ++ fcm->page = page_addr; ++ ++ lbc->fbar = page_addr >> (this->phys_erase_shift - this->page_shift); ++ if (fcm->pgs) { ++ lbc->fpar = ((page_addr << FPAR_LP_PI_SHIFT) & FPAR_LP_PI) | ++ ( oob ? FPAR_LP_MS : 0) | ++ column; ++ buf_num = (page_addr & 1) << 2; ++ } else { ++ lbc->fpar = ((page_addr << FPAR_SP_PI_SHIFT) & FPAR_SP_PI) | ++ ( oob ? FPAR_SP_MS : 0) | ++ column; ++ buf_num = page_addr & 7; ++ } ++ fcm->addr = (unsigned char*)(fcm->base + (buf_num * 1024)); ++ ++ /* for OOB data point to the second half of the buffer */ ++ if (oob) { ++ fcm->addr += (fcm->pgs ? 2048 : 512); ++ } ++} ++ ++/* not required for FCM */ ++static void fcm_hwcontrol(struct mtd_info *mtdinfo, int cmd) ++{ ++ return; ++} ++ ++ ++/* ++ * FCM does not support 16 bit data busses ++ */ ++static u16 fcm_read_word(struct mtd_info *mtd) ++{ ++ printf("fcm_read_word: UNIMPLEMENTED.\n"); ++ return 0; ++} ++static void fcm_write_word(struct mtd_info *mtd, u16 word) ++{ ++ printf("fcm_write_word: UNIMPLEMENTED.\n"); ++} ++ ++/* ++ * Write buf to the FCM Controller Data Buffer ++ */ ++static void fcm_write_buf(struct mtd_info *mtd, const u_char *buf, int len) ++{ ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ ++ FCM_DEBUG(3,"fcm_write_buf: writing %d bytes starting with 0x%x" ++ " at %d.\n", len, *((unsigned long*) buf), fcm->index); ++ ++ /* If armed catch the address of the OOB buffer so that it can be */ ++ /* updated with the real signature after the program comletes */ ++ if (!fcm->oobbuf) ++ fcm->oobbuf = (int) buf; ++ ++ /* copy the data into the FCM hardware buffer and update the index */ ++ memcpy(&(fcm->addr[fcm->index]), buf, len); ++ fcm->index += len; ++ return; ++} ++ ++ ++/* ++ * FCM does not support individual writes. Instead these are either commands ++ * or data being written, both of which are handled through the cmdfunc ++ * handler. ++ */ ++static void fcm_write_byte(struct mtd_info *mtd, u_char byte) ++{ ++ printf("fcm_write_byte: UNIMPLEMENTED.\n"); ++} ++ ++/* ++ * read a byte from either the FCM hardware buffer if it has any data left ++ * otherwise issue a command to read a single byte. ++ */ ++static u_char fcm_read_byte(struct mtd_info *mtd) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ unsigned char byte; ++ ++ /* If there are still bytes in the FCM then use the next byte */ ++ if(fcm->index < fcm->read_bytes) { ++ byte = fcm->addr[(fcm->index)++]; ++ FCM_DEBUG(4,"fcm_read_byte: byte %u (%02X): %d of %d.\n", ++ byte, byte, fcm->index-1, fcm->read_bytes); ++ } else { ++ /* otherwise issue a command to read 1 byte */ ++ lbc->fir = (FIR_OP_RSW << FIR_OP0_SHIFT); ++ fcm->use_mdr = 1; ++ fcm->read_bytes = 0; ++ fcm->index = 0; ++ fcm->req_bytes = 0; ++ fcm->req_index = 0; ++ byte = fcm_run_command(mtd) ? ERR_BYTE : fcm->mdr & 0xff; ++ FCM_DEBUG(4,"fcm_read_byte: byte %u (%02X) from bus.\n", ++ byte, byte); ++ } ++ ++ return byte; ++} ++ ++ ++/* ++ * Read from the FCM Controller Data Buffer ++ */ ++static void fcm_read_buf(struct mtd_info *mtd, u_char* buf, int len) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ int i; ++ int rest; ++ ++ FCM_DEBUG(3,"fcm_read_buf: reading %d bytes.\n", len); ++ ++ /* If last read failed then return error bytes */ ++ if (fcm->status != LTESR_CC) { ++ /* just keep copying bytes so that the oob works */ ++ memcpy(buf, &(fcm->addr[(fcm->index)]), len); ++ fcm->index += len; ++ } ++ else ++ { ++ /* see how much is still in the FCM buffer */ ++ i = min(len, (fcm->read_bytes - fcm->index)); ++ rest = i - len; ++ len = i; ++ ++ memcpy(buf, &(fcm->addr[(fcm->index)]), len); ++ fcm->index += len; ++ ++ /* If more data is needed then issue another block read */ ++ if (rest) { ++ FCM_DEBUG(3,"fcm_read_buf: getting %d more bytes.\n", ++ rest); ++ buf += len; ++ lbc->fir = (FIR_OP_RBW << FIR_OP0_SHIFT); ++ set_addr(mtd, 0, 0, 0); ++ lbc->fbcr = rest; ++ fcm->req_bytes = lbc->fbcr; ++ fcm->req_index = 0; ++ fcm->use_mdr = 0; ++ if (!fcm_run_command(mtd)) ++ fcm_read_buf(mtd, buf, rest); ++ else ++ memcpy(buf, fcm->addr, rest); ++ } ++ } ++ return; ++} ++ ++ ++/* ++ * Verify buffer against the FCM Controller Data Buffer ++ */ ++static int fcm_verify_buf(struct mtd_info *mtd, const u_char *buf, int len) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ int i; ++ int rest; ++ ++ FCM_DEBUG(3,"fcm_verify_buf: checking %d bytes starting with 0x%02x.\n", ++ len, *((unsigned long*) buf)); ++ /* If last read failed then return error bytes */ ++ if (fcm->status != LTESR_CC) { ++ return EFAULT; ++ } ++ ++ /* see how much is still in the FCM buffer */ ++ i = min(len, (fcm->read_bytes - fcm->index)); ++ rest = i - len; ++ len = i; ++ ++ if (memcmp(buf, &(fcm->addr[(fcm->index)]), len)) { ++ return EFAULT; ++ } ++ ++ fcm->index += len; ++ if (rest) { ++ FCM_DEBUG(3,"fcm_verify_buf: getting %d more bytes.\n", rest); ++ buf += len; ++ lbc->fir = (FIR_OP_RBW << FIR_OP0_SHIFT); ++ set_addr(mtd, 0, 0, 0); ++ lbc->fbcr = rest; ++ fcm->req_bytes = lbc->fbcr; ++ fcm->req_index = 0; ++ fcm->use_mdr = 0; ++ if (fcm_run_command(mtd)) ++ return EFAULT; ++ return fcm_verify_buf(mtd, buf, rest); ++ ++ } ++ return 0; ++} ++ ++/* this function is called after Program and Erase Operations to ++ * check for success or failure */ ++static int fcm_wait(struct mtd_info *mtd, struct nand_chip *this, int state) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ struct fcm_nand *fcm = this->priv; ++ ++ if (fcm->status != LTESR_CC) { ++ return(0x1); /* Status Read error */ ++ } ++ ++ /* Use READ_STATUS command, but wait for the device to be ready */ ++ fcm->use_mdr = 0; ++ fcm->req_index = 0; ++ fcm->read_bytes = 0; ++ fcm->index = 0; ++ fcm->oobbuf = -1; ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_RBW << FIR_OP1_SHIFT); ++ lbc->fcr = (NAND_CMD_STATUS << FCR_CMD0_SHIFT); ++ set_addr(mtd, 0, 0, 0); ++ lbc->fbcr = 1; ++ fcm->req_bytes = lbc->fbcr; ++ fcm_run_command(mtd); ++ if (fcm->status != LTESR_CC) { ++ return(0x1); /* Status Read error */ ++ } ++ return this->read_byte(mtd); ++} ++ ++ ++/* cmdfunc send commands to the FCM */ ++static void fcm_cmdfunc(struct mtd_info *mtd, unsigned command, ++ int column, int page_addr) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ ++ fcm->use_mdr = 0; ++ fcm->req_index = 0; ++ ++ /* clear the read buffer */ ++ fcm->read_bytes = 0; ++ if (command != NAND_CMD_PAGEPROG) { ++ fcm->index = 0; ++ fcm->oobbuf = -1; ++ } ++ ++ switch (command) { ++ /* READ0 and READ1 read the entire buffer to use hardware ECC */ ++ case NAND_CMD_READ1: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_READ1, page_addr:" ++ " 0x%x, column: 0x%x.\n", page_addr, column); ++ fcm->req_index = column + 256; ++ goto read0; ++ case NAND_CMD_READ0: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_READ0, page_addr:" ++ " 0x%x, column: 0x%x.\n", page_addr, column); ++ fcm->req_index = column; ++read0: ++ if (fcm->pgs) { ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CA << FIR_OP1_SHIFT) | ++ (FIR_OP_PA << FIR_OP2_SHIFT) | ++ (FIR_OP_CW1 << FIR_OP3_SHIFT) | ++ (FIR_OP_RBW << FIR_OP4_SHIFT); ++ } else { ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CA << FIR_OP1_SHIFT) | ++ (FIR_OP_PA << FIR_OP2_SHIFT) | ++ (FIR_OP_RBW << FIR_OP3_SHIFT); ++ } ++ lbc->fcr = (NAND_CMD_READ0 << FCR_CMD0_SHIFT) | ++ (NAND_CMD_READSTART << FCR_CMD1_SHIFT); ++ lbc->fbcr = 0; /* read entire page to enable ECC */ ++ set_addr(mtd, 0, page_addr, 0); ++ fcm->req_bytes = mtd->oobblock + mtd->oobsize; ++ goto write_cmd2; ++ /* READOOB read only the OOB becasue no ECC is performed */ ++ case NAND_CMD_READOOB: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_READOOB, page_addr:" ++ " 0x%x, column: 0x%x.\n", page_addr, column); ++ if (fcm->pgs) { ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CA << FIR_OP1_SHIFT) | ++ (FIR_OP_PA << FIR_OP2_SHIFT) | ++ (FIR_OP_CW1 << FIR_OP3_SHIFT) | ++ (FIR_OP_RBW << FIR_OP4_SHIFT); ++ lbc->fcr = (NAND_CMD_READ0 << FCR_CMD0_SHIFT) | ++ (NAND_CMD_READSTART << FCR_CMD1_SHIFT); ++ } else { ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CA << FIR_OP1_SHIFT) | ++ (FIR_OP_PA << FIR_OP2_SHIFT) | ++ (FIR_OP_RBW << FIR_OP3_SHIFT); ++ lbc->fcr = (NAND_CMD_READOOB << FCR_CMD0_SHIFT); ++ } ++ lbc->fbcr = mtd->oobsize - column; ++ set_addr(mtd, column, page_addr, 1); ++ goto write_cmd1; ++ /* READID must read all 5 possible bytes while CEB is active */ ++ case NAND_CMD_READID: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_READID.\n"); ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_UA << FIR_OP1_SHIFT) | ++ (FIR_OP_RBW << FIR_OP2_SHIFT); ++ lbc->fcr = (NAND_CMD_READID << FCR_CMD0_SHIFT); ++ lbc->fbcr = 5; /* 5 bytes for manuf, device and exts */ ++ fcm->use_mdr = 1; ++ fcm->mdr = 0; ++ goto write_cmd0; ++ /* ERASE1 stores the block and page address */ ++ case NAND_CMD_ERASE1: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_ERASE1, page_addr:" ++ " 0x%x.\n", page_addr); ++ set_addr(mtd, 0, page_addr, 0); ++ goto end; ++ /* ERASE2 uses the block and page address from ERASE1 */ ++ case NAND_CMD_ERASE2: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_ERASE2.\n"); ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_PA << FIR_OP1_SHIFT) | ++ (FIR_OP_CM1 << FIR_OP2_SHIFT); ++ lbc->fcr = (NAND_CMD_ERASE1 << FCR_CMD0_SHIFT) | ++ (NAND_CMD_ERASE2 << FCR_CMD1_SHIFT); ++ lbc->fbcr = 0; ++ goto write_cmd1; ++ /* SEQIN sets up the addr buffer and all registers except the length */ ++ case NAND_CMD_SEQIN: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_SEQIN/PAGE_PROG, page_addr:" ++ " 0x%x, column: 0x%x.\n", page_addr, column); ++ if (column == 0) { ++ lbc->fbcr = 0; /* write entire page to enable ECC */ ++ } else { ++ lbc->fbcr = 1; /* mark as partial page so no HW ECC */ ++ } ++ if (fcm->pgs) { ++ /* always use READ0 for large page devices */ ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CA << FIR_OP1_SHIFT) | ++ (FIR_OP_PA << FIR_OP2_SHIFT) | ++ (FIR_OP_WB << FIR_OP3_SHIFT) | ++ (FIR_OP_CW1 << FIR_OP4_SHIFT); ++ lbc->fcr = (NAND_CMD_SEQIN << FCR_CMD0_SHIFT) | ++ (NAND_CMD_PAGEPROG << FCR_CMD1_SHIFT); ++ set_addr(mtd, column, page_addr, 0); ++ } else { ++ lbc->fir = (FIR_OP_CW0 << FIR_OP0_SHIFT) | ++ (FIR_OP_CM2 << FIR_OP1_SHIFT) | ++ (FIR_OP_CA << FIR_OP2_SHIFT) | ++ (FIR_OP_PA << FIR_OP3_SHIFT) | ++ (FIR_OP_WB << FIR_OP4_SHIFT) | ++ (FIR_OP_CW1 << FIR_OP5_SHIFT); ++ if (column >= mtd->oobblock) { ++ /* OOB area --> READOOB */ ++ column -= mtd->oobblock; ++ lbc->fcr = (NAND_CMD_READOOB << FCR_CMD0_SHIFT) ++ | (NAND_CMD_PAGEPROG<< FCR_CMD1_SHIFT) ++ | (NAND_CMD_SEQIN << FCR_CMD2_SHIFT); ++ set_addr(mtd, column, page_addr, 1); ++ } else if (column < 256) { ++ /* First 256 bytes --> READ0 */ ++ lbc->fcr = (NAND_CMD_READ0 << FCR_CMD0_SHIFT) ++ | (NAND_CMD_PAGEPROG<< FCR_CMD1_SHIFT) ++ | (NAND_CMD_SEQIN << FCR_CMD2_SHIFT); ++ set_addr(mtd, column, page_addr, 0); ++ } else { ++ /* Second 256 bytes --> READ1 */ ++ column -= 256; ++ lbc->fcr = (NAND_CMD_READ1 << FCR_CMD0_SHIFT) ++ | (NAND_CMD_PAGEPROG<< FCR_CMD1_SHIFT) ++ | (NAND_CMD_SEQIN << FCR_CMD2_SHIFT); ++ set_addr(mtd, column, page_addr, 0); ++ } ++ } ++ goto end; ++ /* PAGEPROG reuses all of the setup from SEQIN and adds the length */ ++ case NAND_CMD_PAGEPROG: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_PAGEPROG" ++ " writing %d bytes.\n",fcm->index); ++ /* if the write did not start at 0 or is not a full page */ ++ /* then set the exact length, otherwise use a full page */ ++ /* write so the HW generates the ECC. */ ++ if (lbc->fbcr || ++ (fcm->index != (mtd->oobblock + mtd->oobsize))) ++ lbc->fbcr = fcm->index; ++ fcm->req_bytes = 0; ++ goto write_cmd2; ++ /* CMD_STATUS must read the status byte while CEB is active */ ++ /* Note - it does not wait for the ready line */ ++ case NAND_CMD_STATUS: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_STATUS.\n"); ++ lbc->fir = (FIR_OP_CM0 << FIR_OP0_SHIFT) | ++ (FIR_OP_RBW << FIR_OP1_SHIFT); ++ lbc->fcr = (NAND_CMD_STATUS << FCR_CMD0_SHIFT); ++ lbc->fbcr = 1; ++ goto write_cmd0; ++ /* RESET without waiting for the ready line */ ++ case NAND_CMD_RESET: ++ FCM_DEBUG(2,"fcm_cmdfunc: NAND_CMD_RESET.\n"); ++ lbc->fir = (FIR_OP_CM0 << FIR_OP0_SHIFT); ++ lbc->fcr = (NAND_CMD_RESET << FCR_CMD0_SHIFT); ++ lbc->fbcr = 0; ++ goto write_cmd0; ++ default: ++ printk("fcm_cmdfunc: error, unsupported command.\n"); ++ goto end; ++ } ++ ++ /* Short cuts fall through to save code */ ++ write_cmd0: ++ set_addr(mtd, 0, 0, 0); ++ write_cmd1: ++ fcm->req_bytes = lbc->fbcr; ++ write_cmd2: ++ fcm_run_command(mtd); ++ ++#ifdef CONFIG_MTD_NAND_VERIFY_WRITE ++ /* if we wrote a page then read back the oob to get the ECC */ ++ if ((command == NAND_CMD_PAGEPROG) && ++ (this->eccmode > NAND_ECC_SOFT) && ++ (lbc->fbcr == 0) && ++ (fcm->oobbuf != 0) && ++ (fcm->oobbuf != -1)) { ++ int i; ++ uint *oob_config; ++ unsigned char *oob_buf; ++ ++ i = fcm->page; ++ oob_buf = (unsigned char*) fcm->oobbuf; ++ oob_config = this->autooob->eccpos; ++ ++ /* wait for the write to complete and check it passed */ ++ if (!(this->waitfunc(mtd, this, FL_WRITING) & 0x01)) { ++ /* read back the OOB */ ++ fcm_cmdfunc(mtd, NAND_CMD_READOOB, 0, i); ++ /* if it succeeded then copy the ECC bytes */ ++ if (fcm->status == LTESR_CC) { ++ for (i = 0; i < this->eccbytes; i++) { ++ oob_buf[oob_config[i]] = ++ fcm->addr[oob_config[i]]; ++ } ++ } ++ } ++ } ++#endif ++ ++ end: ++ return; ++} ++ ++/* ++ * fcm_enable_hwecc - start ECC generation ++ */ ++static void fcm_enable_hwecc(struct mtd_info *mtd, int mode) ++{ ++ return; ++} ++ ++/* ++ * fcm_calculate_ecc - Calculate the ECC bytes ++ * This is done by hardware during the write process, so we use this ++ * to arm the oob buf capture on the next write_buf() call. The ECC bytes ++ * only need to be captured if CONFIG_MTD_NAND_VERIFY_WRITE is defined which ++ * reads back the pages and checks they match the data and oob buffers. ++ */ ++static int fcm_calculate_ecc(struct mtd_info *mtd, const u_char *dat, u_char *ecc_code) ++{ ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ ++#ifdef CONFIG_MTD_NAND_VERIFY_WRITE ++ /* arm capture of oob buf ptr on next write_buf */ ++ fcm->oobbuf = 0; ++#endif ++ return 0; ++} ++ ++/* ++ * fcm_correct_data - Detect and correct bit error(s) ++ * The detection and correction is done automatically by the hardware, ++ * if the complete page was read. If the status code is okay then there ++ * was no error, otherwise we return an error code indicating an uncorrectable ++ * error. ++ */ ++static int fcm_correct_data(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, u_char *calc_ecc) ++{ ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ ++ /* No errors */ ++ if (fcm->status == LTESR_CC) ++ return 0; ++ ++ return -1; /* uncorrectable error */ ++} ++ ++ ++ ++/* ++ * Dummy scan_bbt to complete setup of the FMR based on NAND size ++ */ ++static int fcm_scan_bbt (struct mtd_info *mtd) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ register struct nand_chip *this = mtd->priv; ++ struct fcm_nand *fcm = this->priv; ++ unsigned int i; ++ unsigned int al; ++ ++ if (!fcm) { ++ printk (KERN_ERR "fcm_scan_bbt():" \ ++ " Failed to allocate chip specific data structure\n"); ++ return -1; ++ } ++ ++ /* calculate FMR Address Length field */ ++ al = 0; ++ for (i = this->pagemask >> 16; i ; i >>= 8) { ++ al++; ++ } ++ ++ /* add to ECCM mode set in fcm_init */ ++ fcm->fmr |= 12 << FMR_CWTO_SHIFT | /* Timeout > 12 mSecs */ ++ al << FMR_AL_SHIFT; ++ ++ FCM_DEBUG(1,"fcm_init: nand->options = %08X\n", this->options); ++ FCM_DEBUG(1,"fcm_init: nand->numchips = %10d\n", this->numchips); ++ FCM_DEBUG(1,"fcm_init: nand->chipsize = %10d\n", this->chipsize); ++ FCM_DEBUG(1,"fcm_init: nand->pagemask = %10X\n", this->pagemask); ++ FCM_DEBUG(1,"fcm_init: nand->eccmode = %10d\n", this->eccmode ); ++ FCM_DEBUG(1,"fcm_init: nand->eccsize = %10d\n", this->eccsize ); ++ FCM_DEBUG(1,"fcm_init: nand->eccbytes = %10d\n", this->eccbytes); ++ FCM_DEBUG(1,"fcm_init: nand->eccsteps = %10d\n", this->eccsteps); ++ FCM_DEBUG(1,"fcm_init: nand->chip_delay = %8d\n", this->chip_delay); ++ FCM_DEBUG(1,"fcm_init: nand->badblockpos = %7d\n", this->badblockpos); ++ FCM_DEBUG(1,"fcm_init: nand->chip_shift = %8d\n", this->chip_shift); ++ FCM_DEBUG(1,"fcm_init: nand->page_shift = %8d\n", this->page_shift); ++ FCM_DEBUG(1,"fcm_init: nand->phys_erase_shift = %2d\n", ++ this->phys_erase_shift); ++ FCM_DEBUG(1,"fcm_init: mtd->flags = %08X\n", mtd->flags); ++ FCM_DEBUG(1,"fcm_init: mtd->size = %10d\n", mtd->size); ++ FCM_DEBUG(1,"fcm_init: mtd->erasesize = %10d\n", mtd->erasesize); ++ FCM_DEBUG(1,"fcm_init: mtd->oobblock = %10d\n", mtd->oobblock); ++ FCM_DEBUG(1,"fcm_init: mtd->oobsize = %10d\n", mtd->oobsize); ++ FCM_DEBUG(1,"fcm_init: mtd->oobavail = %10d\n", mtd->oobavail); ++ FCM_DEBUG(1,"fcm_init: mtd->ecctype = %10d\n", mtd->ecctype); ++ FCM_DEBUG(1,"fcm_init: mtd->eccsize = %10d\n", mtd->eccsize); ++ ++ /* adjust Option Register and ECC to match Flash page size */ ++ if (mtd->oobblock == 512) ++ lbc->bank[fcm->bank].or &= ~(OR_FCM_PGS); ++ else if (mtd->oobblock == 2048) { ++ lbc->bank[fcm->bank].or |= OR_FCM_PGS; ++ /* adjust ecc setup if needed */ ++ if ( (lbc->bank[fcm->bank].br & BR_DECC) == BR_DECC_CHK_GEN) { ++ mtd->eccsize = 2048; ++ mtd->oobavail -= 9; ++ this->eccmode = NAND_ECC_HW12_2048; ++ this->eccsize = 2048; ++ this->eccbytes += 9; ++ this->eccsteps = 1; ++ this->autooob = (fcm->fmr & FMR_ECCM) ? ++ &fcm_oob_lp_eccm1 : &fcm_oob_lp_eccm0; ++ memcpy(&mtd->oobinfo, this->autooob, ++ sizeof(mtd->oobinfo)); ++ } ++ } ++ else { ++ printf("fcm_init: page size %d is not supported\n", ++ mtd->oobblock); ++ return -1; ++ } ++ fcm->pgs = (lbc->bank[fcm->bank].or>>OR_FCM_PGS_SHIFT) & 1; ++ ++ if (al > 2) { ++ printf("fcm_init: %d address bytes is not supported\n", al+2); ++ return -1; ++ } ++ ++ /* restore default scan_bbt function and call it */ ++ this->scan_bbt = nand_default_bbt; ++ return nand_default_bbt(mtd); ++} ++ ++/* ++ * Board-specific NAND initialization. The following members of the ++ * argument are board-specific (per include/linux/mtd/nand_new.h): ++ * - IO_ADDR_R?: address to read the 8 I/O lines of the flash device ++ * - IO_ADDR_W?: address to write the 8 I/O lines of the flash device ++ * - hwcontrol: hardwarespecific function for accesing control-lines ++ * - dev_ready: hardwarespecific function for accesing device ready/busy line ++ * - enable_hwecc: function to enable (reset) hardware ecc generator. Must ++ * only be provided if a hardware ECC is available ++ * - eccmode: mode of ecc, see defines ++ * - chip_delay: chip dependent delay for transfering data from array to ++ * read regs (tR) ++ * - options: various chip options. They can partly be set to inform ++ * nand_scan about special functionality. See the defines for further ++ * explanation ++ * Members with a "?" were not set in the merged testing-NAND branch, ++ * so they are not set here either. ++ */ ++int board_nand_init(struct nand_chip *nand) ++{ ++ volatile immap_t *im = (immap_t *) CFG_IMMR; ++ volatile lbus83xx_t *lbc= &im->lbus; ++ struct fcm_nand *fcm; ++ unsigned int bank; ++ ++ /* Enable FCM detection of timeouts, ECC errors and completion */ ++ lbc->ltedr &= ~(LTESR_FCT | LTESR_PAR | LTESR_CC); ++ ++ fcm = kmalloc (sizeof(struct fcm_nand), GFP_KERNEL); ++ if (!fcm) { ++ printk (KERN_ERR "board_nand_init():" \ ++ " Cannot allocate read buffer data structure\n"); ++ return; ++ } ++ ++ /* Find which chip select bank is being used for this device */ ++ for (bank=0; bank<8; bank++) { ++ if ( (lbc->bank[bank].br & BR_V) && ++ ( (lbc->bank[bank].br & BR_MSEL) == BR_MS_FCM ) && ++ ( (lbc->bank[bank].br & BR_BA) == ++ (lbc->bank[bank].or & OR_FCM_AM & ++ (unsigned int)(nand->IO_ADDR_R) ) ) ) { ++ fcm->bank = bank; ++// TODO fcm->fmr = FMR_ECCM; /* rest filled in later */ ++ fcm->fmr = 0; /* rest filled in later */ ++ fcm->read_bytes = 0; ++ fcm->index = 0; ++ fcm->pgs = (lbc->bank[bank].or>>OR_FCM_PGS_SHIFT) & 1; ++ fcm->base = lbc->bank[bank].br & BR_BA; ++ fcm->addr = (unsigned char*) (fcm->base); ++ nand->priv = fcm; ++ fcm->oobbuf = -1; ++ break; ++ } ++ } ++ ++ if (!nand->priv) { ++ printk (KERN_ERR "board_nand_init():" \ ++ " Could not find matching Chip Select\n"); ++ return -1; ++ } ++ ++ /* set up nand options */ ++ nand->options = 0; ++ /* set up function call table */ ++ nand->hwcontrol = fcm_hwcontrol; ++ nand->waitfunc = fcm_wait; ++ nand->read_byte = fcm_read_byte; ++ nand->write_byte = fcm_write_byte; ++ nand->read_word = fcm_read_word; ++ nand->write_word = fcm_write_word; ++ nand->read_buf = fcm_read_buf; ++ nand->verify_buf = fcm_verify_buf; ++ nand->write_buf = fcm_write_buf; ++ nand->cmdfunc = fcm_cmdfunc; ++ nand->scan_bbt = fcm_scan_bbt; ++ ++ /* If CS Base Register selects full hardware ECC then use it */ ++ if ( ( (lbc->bank[bank].br & BR_DECC) >> BR_DECC_SHIFT) == 2) { ++ /* put in small page settings and adjust later if needed */ ++ nand->eccmode = NAND_ECC_HW3_512; ++ nand->autooob = (fcm->fmr & FMR_ECCM) ? ++ &fcm_oob_sp_eccm1 : &fcm_oob_sp_eccm0; ++ nand->calculate_ecc = fcm_calculate_ecc; ++ nand->correct_data = fcm_correct_data; ++ nand->enable_hwecc = fcm_enable_hwecc; ++ } else { ++ /* otherwise fall back to default software ECC */ ++ nand->eccmode = NAND_ECC_SOFT; ++ } ++ return 0; ++} ++ ++#endif ++#endif +diff -urN u-boot-1.3.1.orig/include/configs/MPC8313ERDB.h u-boot-1.3.1/include/configs/MPC8313ERDB.h +--- u-boot-1.3.1.orig/include/configs/MPC8313ERDB.h 2007-12-06 10:21:19.000000000 +0100 ++++ u-boot-1.3.1/include/configs/MPC8313ERDB.h 2008-01-31 17:36:18.000000000 +0100 +@@ -360,6 +360,7 @@ + #define CONFIG_CMD_MII + #define CONFIG_CMD_DATE + #define CONFIG_CMD_PCI ++#define CONFIG_CMD_NAND + + #if defined(CFG_RAMBOOT) + #undef CONFIG_CMD_ENV diff --git a/packages/u-boot/u-boot_1.3.2.bb b/packages/u-boot/u-boot_1.3.2.bb index 2886dde..5c32b9a 100644 --- a/packages/u-boot/u-boot_1.3.2.bb +++ b/packages/u-boot/u-boot_1.3.2.bb @@ -2,6 +2,11 @@ require u-boot.inc DEFAULT_PREFERENCE = "-1" -SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2" +PR = "r1" + +SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2 \ + file://mpc8313e-rdb-autoboot.patch;patch=1 \ + file://mpc8313e-rdb-mtdparts.patch;patch=1 \ + file://mpc8313e-rdb-nand.patch;patch=1" PACKAGE_ARCH = "${MACHINE_ARCH}"