On Thursday 05 November 2009 06:10:04 Adam Lackorzynski wrote:
> On Wed Nov 04, 2009 at 21:11:06 +0800, Guanghui, Cheng wrote:
> > On Wednesday 04 November 2009 07:28:02 Adam Lackorzynski wrote:
> > > Hi,
> > >
> > > On Tue Nov 03, 2009 at 23:37:12 +0800, Guanghui, Cheng wrote:
> > > > I tried to map the hpet iomem to the virtual memory but i got some
> > > > error. The log is as following:
> > > > vtimer | rmgr_pager 4:0
> > > > vtimer | hpet_address 0xfed00000
> > > > vtimer | hpet size 0x400000
> > > > vtimer | hpet_virt_address 0x400000
> > > > ROOT: Cannot map page at fed00000 log2_size=12 failed
> > > > vtimer | IOMem mapping error : No fpage received
> > > > vtimer | __handle_pf(): L4RM: page fault: no entry in region list
> > > > vtimer | L4RM: [PF] read at 0x00400000, ip 0100024e, src 8.02
> > > > It seems that when I map the iomem the pagesize is not permitted but
> > > > superpagesize is ok. But i still get the error as "No fpage
> > > > received". Does anybody tell me what the problem is?
> > >
> > > roottask can map non-RAM as superpages only. For getting device memory
> > > you should use and query l4io which can handle this much better. Did
> > > you try that?
> >
> > Hello, Adam:
> > Now i fixed l4io a little and add the hpet device after the tpm device
> > in the l4io/server/src/static_cfg_x86.c and now i could map the hpet
> > device into the virtual device. I could read/write the hpet device
> > directly. This is a important progress for vtimer server implementation.
> > If i make more i could report to you.
Hello, Adam:
Today I get a small progress about ipet driver for L4/Fiasco because
the hpet driver i mentioned before can't output the correct value and all
fields of hpet driver are 0xFFFFFFFF. Today i find that should be caused by
the Intel buggy chipesets (ICH7 Family) and i also find some code could
fixed it from Linux kernel code that is located in the ich_force_enable_hpet() of arch/x86/kernel/quirks.c.
The solution is like this:
I added two more IO resources named RCBA and HPET in the
l4io/server/src/ static_cfg_x86.c as following:
static l4io_desc_device_t
rcba = { "RCBA", 1, { { L4IO_RESOURCE_MEM, 0xfed1c000, 0xfed1ffff } } };
static l4io_desc_device_t
hpet = {"HPET", 1, { { L4IO_RESOURCE_MEM, 0xfed00000, 0xfed003ff } } };
And then i get the rcba device in the local and do the same behaviour
as the ich_force_enable_hpet() does in the arch/x86/kernel/quirks.c and then
get the hpet device in the local space. This time it could work and display there are 3 timers before it is 16 (F).
From the Linux kernel code this problem should be in the Intel Chipsets
ICH6, ICH7, ICH8, ICH9 and ICH10. But luckily the linux has fixed this problem otherwise i can't get it work.
Thanks.
Cheng Guanghui