I have built a kernel for Raspberry Pi 2 using the latest upstream kernel (version 4.15-rc5): https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/
I configured it with multi_v7_defconfig and added only a very few changes to the default .config to support the touchscreen panel (CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m, CONFIG_DRM_VC4=m, CONFIG_I2C_GPIO=m)
If anyone wants to see my kernel config, it's here: https://pastebin.com/mg0KPTxN
I also installed the DTB files and modules associated with the kernel build. I know these are at least working because I have the 7" display working (which was the whole purpose of the exercise).
However, booting this kernel gives no USB support. Many USB drivers are loaded, but nothing works. There's no USB-related output (other than the messages about drivers loading) and lsusb -v returns nothing.
I verified that CONFIG_USB_DWC2=y and CONFIG_USB_DWC2_HOST=y (DWC2_HOST was originally DWC2_DUAL_ROLE, it doesn't matter).
Supposedly USB has been supported out of the box since 2014, so I am surprised to have this problem.
Then I mix-and-matched some parts just to see what would happen, trying my kernel with RPi's device tree and their kernel with my device tree. Neither has working USB - so it only works with the RPi kernel and RPi device tree.
Now, this might be because they use a different USB driver than in the upstream kernel - but it might also mean that the device tree that comes with the kernel is wrong.
So I dug around a little and all I could find was this: https://lists.denx.de/pipermail/u-boot/2013-November/167836.html Supposedly the firmware doesn't turn the USB on at boot time. However, that was four years ago. Since then, many things have changed, including booting from USB, and notes in other pages that it now supposedly just works.
In any event, I don't want to use U-boot. I noticed that the U-boot code was just calling the VC mailbox interface, so I looked at just trying to call it with the vcmailbox utility. Unfortunately, I didn't have the required /dev/vcio device file, nor any other promising-looking devices (tried making it myself with mknod, but no reason to expect that to work, and it didn't). I have verified that CONFIG_BCM2835_MBOX=y and I found a dmesg line: "bcm2835-mbox 3f00b880.mailbox: mailbox enabled" so it seems to be working, just the device file is different.
So, two unresolved problems: 1) VC mailbox is hiding, and 2) No USB. Obviously, #2 is more important, but #1 might be the key to getting #2 working.
If anyone has any ideas, that would be great! Thanks.