Thank you so much CHristian. Sorry to bother you again. One more thing that is not clear to me hope you can give me some advice. For the the BeagleBone Black board I’m using now it seems the eMMC is connected through GPIO pins. I’m not sure how to map the MMIO regions and interrupts (https://github.com/derekmolloy/boneDeviceTree/blob/master/DTSource3.8.12/am33xx.dtsi)

For example this is the MMC1 and MMC2 I saw on the device tree:

mmc1: mmc@48060000 {
			compatible = "ti,omap3-hsmmc";
			ti,hwmods = "mmc1";
			ti,dual-volt;
			ti,needs-special-reset;
			ti,needs-special-hs-handling;
			dmas = <&edma 24
				&edma 25>;
			dma-names = "tx", "rx";
			status = "disabled";
		};

mmc2: mmc@481d8000 {
			compatible = "ti,omap3-hsmmc";
			ti,hwmods = "mmc2";
			ti,needs-special-reset;
			ti,needs-special-hs-handling;
			dmas = <&edma 2
				&edma 3>;
			dma-names = "tx", "rx";
			status = "disabled";
		};

mmc3: mmc@47810000 {
			compatible = "ti,omap3-hsmmc";
			ti,hwmods = "mmc3";
			ti,needs-special-reset;
			ti,needs-special-hs-handling;
			status = "disabled";
		};
Is 48060000 the beginning of MMIO region? How about the size?

Second for the I2C I saw this:
		i2c0: i2c@44e0b000 {
			compatible = "ti,omap4-i2c";
			#address-cells = <1>;
			#size-cells = <0>;
			ti,hwmods = "i2c1";	/* TODO: Fix hwmod */
			reg = <0x44e0b000 0x1000>;
			interrupts = <70>;
			status = "disabled";
		};
Does it mean the MMIO region is [0x44e0b000, 0x44e0c000]?

I’m sorry for asking so dumb many questions.

Thanks
-Dan
  
On Jul 7, 2017, at 7:24 AM, Christian Ludwig <christian_ludwig@genua.de> wrote:

Hi,

On Friday, 7. July 2017, 02:19:34 Daniel  Wang wrote:
I have a question. I just saw in the io/server/src/drivers/gpio
directory.There are only two cc files. One is for bcm2835.c another one is
for omap.cc. Does that mean if I want to make MMC and Ethernet drivers
works in guest Linux on platform other than bcm2835, OMAP3 or OMAP4 I have
to modify the driver file and provide support functions for that platform?

Therse GPIO drivers in io provide a means to pass different GPIO pins to
different clients, e.g. Linuxes. It's a way to moderate access to a GPIO
controller from multiple clients.

As far as I understand, you want to drive MMC and ethernet in one L4Linux. So
you just have to pass the proper devices (MMIO regions and interrupts) to
Linux. As Adam pointed out, you need to tweak Kconfig files to allow you to
select the proper drivers. Note however that your device's drivers are most
likely not sufficient to finally get the devices going. These drivers most
likely need other infrastructure like clock devices and some power management.
You need to find a way to either also pass these to Linux, or build a separate
clock/pm server that only passes the necessary clock gates and power lines to
Linux. Which also means you need to create a set of new drivers in Linux.

If you are really lucky you might be able to patch out the clock/pm calls in
the Linux drivers and get a first working version. But no guarantees on that.


Hope that helps,


- Christian


--
genua GmbH
Domagkstrasse 7, 85551 Kirchheim bei Muenchen
tel +49 89 991950-0, fax -999, www.genua.de
Geschaeftsfuehrer: Dr. Magnus Harlander, Bernhard Schneck,
Mark Tesch. Amtsgericht Muenchen HRB 98238
genua ist ein Unternehmen der Bundesdruckerei-Gruppe.