[linux-ileri] Re: =?utf-8?q?=3FUTF-8=3FQ=3Fkernel=5Fspacede=5FGPIO=5Fya=5Fula=C3=BEm? =?utf-8?q?ak=2E=3F?

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: HASAN HÜSEYIN YILMAZ (hasan.yilmaz@gmail.com)
Date: Wed 22 Sep 2004 - 14:55:45 EEST


Selam Serdar Bey sizin söyledikleriniz daha basit geldiği iç
in onu
kullanmayı denedim fakat yine çalışmadı. Bunun seb
ebi benim kodu
koyduğum yer olabilir mi ? çünkü ben başka bir =C3
=A7özüm denemiştim. Oda
aynı şekilde hata vermişti. Ben kodu

 drivers/video/fbcon.c dosyasina yazdım fbcon_init içerisinde.
Kodu
yerleştirmek için en uygun yer neresidir bu konuda bilgi almak
istiyorum. arm SA1110 üzerinde bu işi diğer yolla nası
l yapabilirim.
Sanırım en doğru yol GPIO_GPIO üzerinden gitmek gibi .
yardımcı
olursanız sevinirim. Kolay gelsin

#define GPIO_BASE_OFFSET 0x90040000
#define GPIO_GPLR_OFFSET 0x00000000
#define GPIO_GPDR_OFFSET 0x00000004
#define GPIO_GPSR_OFFSET 0x00000008
#define GPIO_GPCR_OFFSET 0x0000000C
#define GPIO_MAP_SIZE (GPIO_BASE_OFFSET)

static void fbcon_init(struct vc_data *conp, int init)
{
    int unit = conp->vc_num;
    struct fb_info *info;

    void *virt_adress;

            /* on which frame buffer will we open this console? */
    info = registered_fb[(int)con2fb_map[unit]];

    info->changevar = &fbcon_changevar;
    fb_display[unit] = *(info->disp); /* copy from default */
    DPRINTK("mode: %s\n",info->modename);
    DPRINTK("visual: %d\n",fb_display[unit].visual);
    DPRINTK("res: %dx%d-%d\n",fb_display[unit].var.xres,
                             fb_display[unit].var.yres,
                             fb_display[unit].var.bits_per_pixel);
    fb_display[unit].conp = conp;
    fb_display[unit].fb_info = info;
    /* clear out the cmap so we don't have dangling pointers */
    fb_display[unit].cmap.len = 0;
    fb_display[unit].cmap.red = 0;
    fb_display[unit].cmap.green = 0;
    fb_display[unit].cmap.blue = 0;
    fb_display[unit].cmap.transp = 0;
    fbcon_setup(unit, init, !init);
    /* Must be done after fbcon_setup to prevent excess updates */
    conp->vc_display_fg = &info->display_fg;
    if (!info->display_fg)
        info->display_fg = conp;

    virt_adress = phys_to_virt(GPIO_BASE_OFFSET + GPIO_GPSR_OFFSET );

    *((unsigned int *)virt_adress) &= 0xFFFFBFFF;

    virt_adress = phys_to_virt(GPIO_BASE_OFFSET + GPIO_GPCR_OFFSET );
    *((unsigned int *)virt_adress) |= 0x00004000;

}

HATA ÇIKTISI ALTTA

Unable to handle kernel paging request at virtual address 90040008
pgd = c0004000
*pgd = 00000000, *pmd = 00000000
Internal error: Oops: 0
CPU: 0
pc : [<c011bb54>] lr : [<c011c5d4>]
sp : c02ffebc ip : c02ffccc fp : c02ffee0
r10: c029d680 r9 : 0000003e r8 : c02e1000
r7 : 00000000 r6 : 00000000 r5 : c020bfcc r4 : 00000000
r3 : c02e114c r2 : 90040008 r1 : c02dffd0 r0 : 00000199
Flags: nZCv IRQs on FIQs on Mode SVC_32 Segment kernel
Control: C000717F Table: C000717F DAC: 0000001D
Process swapper (pid: 1, stackpage=c02ff000)
Stack:
c02ffea0: c011c5d4 c011bb54 60000013
ffffffff 00000000
c02ffec0: c01fbe50 00000000 c01fbe50 c01b2fd8 00000000 c02ffefc
c02ffee4 c00e372c
c02ffee0: c011baa4 00000001 00000000 00000000 c02fff38 c02fff00
c00e7854 c00e3690
c02fff00: 3c081130 c01b2f34 00000000 00000001 00000000 0000003f
c02e1000 00000000
c02fff20: 00000000 c02fff3c c0210304 c02fff6c c02fff3c c011aa28
c00e778c c01201a4
c02fff40: c011fecc c02e1000 00000000 c0018a7c c01de300 c01cec88
6901b119 0000001f
c02fff60: c02fff88 c02fff70 c001471c c011a8ac c02e1000 00000000
c0018a80 c02fffa4
c02fff80: c02fff8c c0013ad8 c00146c0 c002d3c8 c002d424 c01de318
c02fffb4 c02fffa8
c02fffa0: c000f7a0 c0013a34 c02fffcc c02fffb8 c0008914 c000f770
00002000 c020a8a8
c02fffc0: c02fffdc c02fffd0 c0008958 c0008904 c02ffffc c02fffe0
c002e22c c0008938
c02fffe0: 00002000 c020a8a8 c01de318 c01de300 00000000 c0300000
c002fc34 c002e228
Backtrace:
Function entered at [<c011ba98>] from [<c00e372c>]
Function entered at [<c00e3684>] from [<c00e7854>]
 r6 = 00000000 r5 = 00000000 r4 = 00000001
Function entered at [<c00e7780>] from [<c011aa28>]
Function entered at [<c011a8a0>] from [<c001471c>]
Function entered at [<c00146b4>] from [<c0013ad8>]
 r5 = C0018A80 r4 = 00000000
Function entered at [<c0013a28>] from [<c000f7a0>]
 r6 = C01DE318 r5 = C002D424 r4 = C002D3C8
Function entered at [<c000f764>] from [<c0008914>]
Function entered at [<c00088f8>] from [<c0008958>]
 r5 = C020A8A8 r4 = 00002000
Function entered at [<c000892c>] from [<c002e22c>]
Function entered at [<c002e21c>] from [<c002fc34>]
 r7 = C01DE300 r6 = C01DE318 r5 = C020A8A8 r4 = 00002000
Code: 0588a14c e59f2028 (e5923000) e3c33901 e4823004
Kernel panic: Attempted to kill init!

On Wed, 22 Sep 2004 14:11:03 +0300, Serdar KÖYLÜ
<serdarkoylu@fisek.com.tr> wrote:
> Selamlar..
>
>
> > > Selamlar
> >
> > Selam,
> >
> >
> > > Embedded bir sistemde LCD nin enable register ni set etmek
> > > istiyorum. Normalde bu ii user spacede aadaki =C3
> > > =A7arlar
> > > kullanarak yapyorum.
> >
> > Bu soru önceden de sorulmuştu sanırım ama başk
a şekilde. 2.6 kernel içinde
> > gerekli olan led_start define edilmiş vaziyette kullanabilirsin ar
m için.
> >
> > veya
> >
> > 2.6 kerneldan seninkine uyarlarsak
> >
> > #define GPIO_GPIO14 (0x00000001 << (14))
> > #define GPDR __REG(0x90040004)
> >
> > #define LED_STATE_ENABLED 1
> >
> > static unsigned int led_state;
> > static unsigned int hw_led_state;
> >
> > #define LED_23 GPIO_GPIO23
> > #define LED_MASK (LED_23)
> >
> > GPDR |= LED_23;
> > hw_led_state = LED_MASK;
> > led_state = LED_STATE_ENABLED;
> >
> > gerisini de vs vs istediğin gibi düzenlersin.
>
> Gayet makul yontemler..
>
> ARM icin phys_to_virt(physical_address) olayi vardi diye hatirliyorum.
> Generic olarak bakarsak, bu durumda:
>
> gpio_start = phys_to_virt(GPIO_GPDR_OFFSET);
> /* Elbet, map vs. ile birlikte tam offset adresi olacak */
>
> gpio_start[GPIO_LED_VEYA_HERNEYSE] = 1;
>
> Seklinde, dogrudan erisim imkani mumkun. Bu da pek tavsiye edilen bir
> yontem degil :(
>
> MTRR uzerinden erisim dusunmek daha iyi olabilir, eger mumkunse. Mumkun
> olup olmadigi mimari (SA1110 ?) gibi bir takim kriterlere bagli.
>
> ARM Ozelinde bakarsak:
>
> Genel kaide olarak ARM uzerinde GPIO_GPIO(#) basta olmak uzere, GPIO
> erisimini duzenleyen seyler mevcut. Mesela Assabet icn _LEDS, GPIO_RADIO
> vs. bir suru tanim hazir mevcut. Bunlari kullanmak daha iyi olacaktir
> saniyorum..
>
> Saygi ve sevgiler..
>
>

--
HASAN HÜSEYIN YILMAZ

ELIAR ELEKTRONIK R & D


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.