All of lore.kernel.org
 help / color / mirror / Atom feed
* Question: about Physical Address mapping
@ 2009-12-07  7:39 Dennis.Yxun
  2009-12-07 13:10 ` Ralf Baechle
  0 siblings, 1 reply; 3+ messages in thread
From: Dennis.Yxun @ 2009-12-07  7:39 UTC (permalink / raw)
  To: linux-mips

[-- Attachment #1: Type: text/plain, Size: 663 bytes --]

HI ALL:
   I have a problem, that our MIPS hardware put registers location from
0x7000,0000 -0x7040,0000.
So, I need to init TLB to access those registers.
   My question is: can I map those range to Kseg2 (mapped,uncached)? I found
"add_wired_entry" sit in
kernel code, seems I should use this function.

   I found code in arch/mips/jazz/irq.c, and the comment tells me
/* Map 0xe4000000 -> 0x0:600005C0, 0xe4100000 -> 400005C0 */
   add_wired_entry(0x01800017, 0x01000017, 0xe4000000, PM_4M);

does that mean after add_wired_entry, virtual address 0xe400,0000 map to
physical address 0x600005C0?
why the address is 0x6000,05C0, not 0x6000,0000

Thanks

Dennis

[-- Attachment #2: Type: text/html, Size: 738 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Question: about Physical Address mapping
  2009-12-07  7:39 Question: about Physical Address mapping Dennis.Yxun
@ 2009-12-07 13:10 ` Ralf Baechle
  2009-12-09  1:58   ` Dennis.Yxun
  0 siblings, 1 reply; 3+ messages in thread
From: Ralf Baechle @ 2009-12-07 13:10 UTC (permalink / raw)
  To: Dennis.Yxun; +Cc: linux-mips

On Mon, Dec 07, 2009 at 03:39:15PM +0800, Dennis.Yxun wrote:

> HI ALL:
>    I have a problem, that our MIPS hardware put registers location from
> 0x7000,0000 -0x7040,0000.
> So, I need to init TLB to access those registers.
>    My question is: can I map those range to Kseg2 (mapped,uncached)? I found
> "add_wired_entry" sit in
> kernel code, seems I should use this function.
> 
>    I found code in arch/mips/jazz/irq.c, and the comment tells me
> /* Map 0xe4000000 -> 0x0:600005C0, 0xe4100000 -> 400005C0 */
>    add_wired_entry(0x01800017, 0x01000017, 0xe4000000, PM_4M);
> 
> does that mean after add_wired_entry, virtual address 0xe400,0000 map to
> physical address 0x600005C0?
> why the address is 0x6000,05C0, not 0x6000,0000

I probably knew 15 years ago when I wrote this code :)

add_wired_entry() is a very awkard API and its use in the Jazz code is
broken so I suggest you use ioremap() instead.

  Ralf

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Question: about Physical Address mapping
  2009-12-07 13:10 ` Ralf Baechle
@ 2009-12-09  1:58   ` Dennis.Yxun
  0 siblings, 0 replies; 3+ messages in thread
From: Dennis.Yxun @ 2009-12-09  1:58 UTC (permalink / raw)
  To: linux-mips

[-- Attachment #1: Type: text/plain, Size: 1709 bytes --]

On Mon, Dec 7, 2009 at 9:10 PM, Ralf Baechle <ralf@linux-mips.org> wrote:

> On Mon, Dec 07, 2009 at 03:39:15PM +0800, Dennis.Yxun wrote:
>
> > HI ALL:
> >    I have a problem, that our MIPS hardware put registers location from
> > 0x7000,0000 -0x7040,0000.
> > So, I need to init TLB to access those registers.
> >    My question is: can I map those range to Kseg2 (mapped,uncached)? I
> found
> > "add_wired_entry" sit in
> > kernel code, seems I should use this function.
> >
> >    I found code in arch/mips/jazz/irq.c, and the comment tells me
> > /* Map 0xe4000000 -> 0x0:600005C0, 0xe4100000 -> 400005C0 */
> >    add_wired_entry(0x01800017, 0x01000017, 0xe4000000, PM_4M);
> >
> > does that mean after add_wired_entry, virtual address 0xe400,0000 map to
> > physical address 0x600005C0?
> > why the address is 0x6000,05C0, not 0x6000,0000
>
> I probably knew 15 years ago when I wrote this code :)
>
> add_wired_entry() is a very awkard API and its use in the Jazz code is
> broken so I suggest you use ioremap() instead.
>
>  Ralf
>

As you suggested, I plan to use ioremap()
it generally works if I use in my driver code after kernel initialization
finished
but I still have a problem:

How can I access hardware register very early?
say that, use early_printk() to access UART registers,
And I try to put ioremap() at prom_init() to try to remap UART register
but, found that kernel will hang..
the UART register is start from physical address 0x700007c0 (> 512M)
but address below 512M can be remaped successfully

I spend a few minutes digging into the ioremap() function
it simply remap <512M space to KSEG1,
while other physical space use different scheme (map to KSEG2), quite
complicated....

[-- Attachment #2: Type: text/html, Size: 2227 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2009-12-09  1:58 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-07  7:39 Question: about Physical Address mapping Dennis.Yxun
2009-12-07 13:10 ` Ralf Baechle
2009-12-09  1:58   ` Dennis.Yxun

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.