blob: 6102d9b867a278b8aa21e6583bca1d55792a245e [file] [log] [blame]
#!/bin/sh
#
# Copyright (C) 2011-2012 OpenWrt.org
#
[ -e /etc/config/ubootenv ] && exit 0
touch /etc/config/ubootenv
. /lib/uboot-envtools.sh
. /lib/functions.sh
CI_UBIPART=ubi
block_dev_path() {
local dev_path
case "$1" in
/dev/mmcblk*)
dev_path="$1"
;;
PARTLABEL=* | PARTUUID=*)
dev_path=$(blkid -t "$1" -o device)
[ -z "${dev_path}" -o $? -ne 0 ] && return 1
;;
*)
return 1;
;;
esac
echo "${dev_path}"
return 0
}
nand_find_volume() {
local ubidevdir ubivoldir
ubidevdir="/sys/devices/virtual/ubi/$1"
[ ! -d "$ubidevdir" ] && return 1
for ubivoldir in $ubidevdir/${1}_*; do
[ ! -d "$ubivoldir" ] && continue
if [ "$( cat $ubivoldir/name )" = "$2" ]; then
basename $ubivoldir
ubi_mknod "$ubivoldir"
return 0
fi
done
}
nand_find_ubi() {
local ubidevdir ubidev mtdnum
mtdnum="$( find_mtd_index $1 )"
[ ! "$mtdnum" ] && return 1
for ubidevdir in /sys/devices/virtual/ubi/ubi*; do
[ ! -d "$ubidevdir" ] && continue
cmtdnum="$( cat $ubidevdir/mtd_num )"
[ ! "$mtdnum" ] && continue
if [ "$mtdnum" = "$cmtdnum" ]; then
ubidev=$( basename $ubidevdir )
ubi_mknod "$ubidevdir"
echo $ubidev
return 0
fi
done
}
board=$(board_name)
case "$board" in
mediatek,*-emmc-rfb)
env_dev=$(cat /sys/module/boot_param/parameters/env_part 2>/dev/null)
[ -n "$env_dev" ] && env_dev=$(block_dev_path "${env_dev}")
[ -z "$env_dev" ] && env_dev=$(block_dev_path "PARTLABEL=u-boot-env")
[ -n "$env_dev" ] && \
ubootenv_add_uci_config "$env_dev" "0" "0x80000"
;;
mediatek,*-snand-rfb)
env_dev=$(cat /sys/module/boot_param/parameters/env_part 2>/dev/null)
if [ -n "$env_dev" ]; then
local mtdnum="$( find_mtd_index "$CI_UBIPART" )"
if [ ! "$mtdnum" ]; then
echo "cannot find ubi mtd partition $CI_UBIPART"
return 1
fi
local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
if [ ! "$ubidev" ]; then
ubiattach -m "$mtdnum"
sync
ubidev="$( nand_find_ubi "$CI_UBIPART" )"
fi
local env_ubivol="$( nand_find_volume "${ubidev}" ${env_dev} )"
if [ -n "${env_ubivol}" ]; then
ubootenv_add_uci_config "/dev/$env_ubivol" "0" "0x80000" "0x80000" 1
fi
fi
;;
esac
config_load ubootenv
config_foreach ubootenv_add_app_config ubootenv
exit 0