Hi everyone
I’m trying to test a fix for arm on the latest Linux kernel, and since my snowball board recently died, I decided to test it
out on my beaglebone white. But I’m having trouble with it. Here’s what I’ve done so far:
First, I updated u-boot to the latest at git://git.denx.de/u-boot.git
I moved the kernel that came with the board to my tftp server and boot it via:
bootcmd=bootp; run mmcargs; bootm
mmcargs=setenv bootargs console=${console} ${optargs} root=${mmcroot} rootfstype=${mmcrootfstype}
console=ttyO0,115200n8
mmcroot=/dev/mmcblk0p2 ro
mmcrootfstype=ext4 rootwait
This works fine when I boot the supplied kernel (3.2). But when I build and boot my own kernel
(I’ve tried 3.13,3.14,3.15 and 3.16, and latest git) it stops at:
[ 2.201723] omap_hsmmc 48060000.mmc: unable to get vmmc regulator -517
[ 2.208937] platform 48060000.mmc: Driver omap_hsmmc requests probe deferral
[ 2.217172] Waiting for root device /dev/mmcblk0p2…
I build the kernel as
CROSS_COMPILE=arm-unknown-linux-gnueabi- make ARCH=arm multi_v7_defconfig
CROSS_COMPILE=arm-unknown-linux-gnueabi- make ARCH=arm dtbs
CROSS_COMPILE=arm-unknown-linux-gnueabi- make ARCH=arm LOADADDR=0x80008000 -j8 zImage modules
cat arch/arm/boot/zImage arch/arm/boot/dts/am335x-evm.dtb > arch/arm/boot/zImage.beagle; mkimage -A arm -O linux -C none -T kernel -a 0x80008000 -e 0x80008000 -d arch/arm/boot/zImage.beagle arch/arm/boot/uImage.beagle
Then I scp the uImage.beagle to my tftp server as the image to load, and reboot the beaglebone white.
I added debugging into the kernel to see what’s happening. There’s three times that the above error is shown.
That -517 is -EPROBE_DEFER. In drivers/regulator/core.c: regulator_dev_lookup() I added printks that look like so:
regulator_supply_alias(&dev, &supply);
printk(“dev=%p of_node=%p\n”, dev, dev ? dev->of_node : NULL);
/* first do a dt based lookup */
if (dev && dev->of_node) {
printk(“dev=%s node=%s\n”, dev->init_name, dev->of_node->name);
node = of_get_regulator(dev, supply);
if (node) {
list_for_each_entry(r, ®ulator_list, list) {
printk(“r=%p dev=%s %s\n”, r,
r->dev.init_name,
r->dev.of_node ? r->dev.of_node->name : “(NULL)”);
if (r->dev.parent &&
node == r->dev.of_node)
return r;
}
printk(“FAILED\n”);
*ret = -EPROBE_DEFER;
return NULL;
} else {
Here’s the output for that:
[ 1.843192] dev=cf0d6610 of_node=cfce38e4
[ 1.847374] dev=(null) node=mmc
[ 1.850666] prop_name=vmmc-supply
[ 1.854162] found regnode=regulator
[ 1.857803] r=cf18a000 dev=(null) fixedregulator
[ 1.862639] r=cf00a000 dev=(null) fixedregulator
[ 1.867455] r=cf049c00 dev=(null) (NULL)
[ 1.871542] FAILED
I don’t know if this is a dts problem or what. But I doubt it’s a hardware issue as I can boot the supplied 3.2 kernel with no problem.
Anyone have any ideas on how to get pass this. My workaround may be to just boot an nfs filesystem, but I really don’t
feel like setting that up at the moment.
Thanks!