OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [hal/] [mips/] [malta/] [current/] [src/] [plf_misc.c] - Blame information for rev 786

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 786 skrzyp
//==========================================================================
2
//
3
//      plf_misc.c
4
//
5
//      HAL platform miscellaneous functions
6
//
7
//==========================================================================
8
// ####ECOSGPLCOPYRIGHTBEGIN####                                            
9
// -------------------------------------------                              
10
// This file is part of eCos, the Embedded Configurable Operating System.   
11
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
12
//
13
// eCos is free software; you can redistribute it and/or modify it under    
14
// the terms of the GNU General Public License as published by the Free     
15
// Software Foundation; either version 2 or (at your option) any later      
16
// version.                                                                 
17
//
18
// eCos is distributed in the hope that it will be useful, but WITHOUT      
19
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or    
20
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License    
21
// for more details.                                                        
22
//
23
// You should have received a copy of the GNU General Public License        
24
// along with eCos; if not, write to the Free Software Foundation, Inc.,    
25
// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.            
26
//
27
// As a special exception, if other files instantiate templates or use      
28
// macros or inline functions from this file, or you compile this file      
29
// and link it with other works to produce a work based on this file,       
30
// this file does not by itself cause the resulting work to be covered by   
31
// the GNU General Public License. However the source code for this file    
32
// must still be made available in accordance with section (3) of the GNU   
33
// General Public License v2.                                               
34
//
35
// This exception does not invalidate any other reasons why a work based    
36
// on this file might be covered by the GNU General Public License.         
37
// -------------------------------------------                              
38
// ####ECOSGPLCOPYRIGHTEND####                                              
39
//==========================================================================
40
//#####DESCRIPTIONBEGIN####
41
//
42
// Author(s):    nickg
43
// Contributors: nickg, jlarmour, dmoseley, jskov
44
// Date:         2001-03-20
45
// Purpose:      HAL miscellaneous functions
46
// Description:  This file contains miscellaneous functions provided by the
47
//               HAL.
48
//
49
//####DESCRIPTIONEND####
50
//
51
//========================================================================*/
52
 
53
#define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS
54
#include <pkgconf/hal.h>
55
 
56
#include <cyg/infra/cyg_type.h>         // Base types
57
#include <cyg/infra/cyg_trac.h>         // tracing macros
58
#include <cyg/infra/cyg_ass.h>          // assertion macros
59
 
60
#include <cyg/hal/hal_arch.h>           // architectural definitions
61
 
62
#include <cyg/hal/hal_intr.h>           // Interrupt handling
63
 
64
#include <cyg/hal/hal_cache.h>          // Cache handling
65
 
66
#include <cyg/hal/hal_if.h>
67
#include <cyg/io/pci_hw.h>
68
#include <cyg/io/pci.h>
69
 
70
//--------------------------------------------------------------------------
71
 
72
externC void cyg_hal_init_superIO(void);
73
static void hal_init_irq(void);
74
 
75
//--------------------------------------------------------------------------
76
 
77
void hal_platform_init(void)
78
{
79
    HAL_WRITE_UINT32(HAL_DISPLAY_LEDBAR, 0xff);
80
#if defined(CYGPKG_CYGMON)
81
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS0, ' ');
82
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS1, 'C');
83
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS2, 'Y');
84
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS3, 'G');
85
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS4, 'M');
86
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS5, 'O');
87
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS6, 'N');
88
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS7, ' ');
89
#elif defined(CYGPKG_REDBOOT)
90
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS0, 'R');
91
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS1, 'e');
92
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS2, 'd');
93
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS3, 'B');
94
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS4, 'o');
95
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS5, 'o');
96
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS6, 't');
97
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS7, ' ');
98
#else
99
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS0, ' ');
100
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS1, ' ');
101
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS2, 'e');
102
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS3, 'C');
103
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS4, 'o');
104
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS5, 's');
105
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS6, ' ');
106
    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS7, ' ');
107
#endif
108
 
109
    // Initialize PCI before VV since serial registers need to be in
110
    // place before that time.
111
    cyg_hal_plf_pci_init();
112
 
113
    // Init interrupt controller on PIIX4
114
    hal_init_irq();
115
 
116
    // Initialize super IO controller
117
    cyg_hal_init_superIO();
118
 
119
    // Set up eCos/ROM interfaces
120
    hal_if_init();
121
 
122
    HAL_ICACHE_INVALIDATE_ALL();
123
    HAL_ICACHE_ENABLE();
124
    HAL_DCACHE_INVALIDATE_ALL();
125
    HAL_DCACHE_ENABLE();
126
}
127
 
128
 
129
/*------------------------------------------------------------------------*/
130
/* Reset support                                                          */
131
 
132
void hal_malta_reset(void)
133
{
134
    *HAL_MALTA_SOFTRES = HAL_MALTA_GORESET;
135
    for(;;);                            // wait for it
136
}
137
 
138
 
139
//--------------------------------------------------------------------------
140
// IRQ init
141
static void
142
hal_init_irq(void)
143
{
144
    cyg_uint32 v;
145
 
146
    // Enable SERIRQ on PIIX4
147
    v = cyg_hal_plf_pci_cfg_read_dword(0, CYG_PCI_DEV_MAKE_DEVFN(_PIIX4_PCI_ID,0),
148
                                       CYG_PCI_CFG_PIIX4_GENCFG);
149
    v |= CYG_PCI_CFG_PIIX4_GENCFG_SERIRQ;
150
    cyg_hal_plf_pci_cfg_write_dword(0, CYG_PCI_DEV_MAKE_DEVFN(_PIIX4_PCI_ID,0),
151
                                    CYG_PCI_CFG_PIIX4_GENCFG, v);
152
 
153
    // Enable SERIRQ and set to continous mode.
154
    v = cyg_hal_plf_pci_cfg_read_byte(0, CYG_PCI_DEV_MAKE_DEVFN(_PIIX4_PCI_ID,0),
155
                                      CYG_PCI_CFG_PIIX4_SERIRQC);
156
    v |= CYG_PCI_CFG_PIIX4_SERIRQC_ENABLE | CYG_PCI_CFG_PIIX4_SERIRQC_CONT;
157
    cyg_hal_plf_pci_cfg_write_byte(0, CYG_PCI_DEV_MAKE_DEVFN(_PIIX4_PCI_ID,0),
158
                                   CYG_PCI_CFG_PIIX4_SERIRQC, v);
159
 
160
    // Init master interrupt controller (4.2.2, pp 74-78)
161
    HAL_WRITE_UINT8(HAL_PIIX4_MASTER_ICW1, HAL_PIIX4_ICW1_SEL | HAL_PIIX4_ICW1_WR);
162
    HAL_WRITE_UINT8(HAL_PIIX4_MASTER_ICW2, CYGNUM_HAL_INTERRUPT_CTRL1_BASE - CYGNUM_HAL_INTERRUPT_EXTERNAL_BASE);
163
    HAL_WRITE_UINT8(HAL_PIIX4_MASTER_ICW3, HAL_PIIX4_ICW3_CASCADE);
164
    HAL_WRITE_UINT8(HAL_PIIX4_MASTER_ICW4, HAL_PIIX4_ICW4_UPMODE);
165
    HAL_WRITE_UINT8(HAL_PIIX4_MASTER_OCW3, HAL_PIIX4_OCW3_SEL | HAL_PIIX4_OCW3_ESSM | HAL_PIIX4_OCW3_REQ);
166
 
167
    // Init slave interrupt controller
168
    HAL_WRITE_UINT8(HAL_PIIX4_SLAVE_ICW1, HAL_PIIX4_ICW1_SEL | HAL_PIIX4_ICW1_WR);
169
    HAL_WRITE_UINT8(HAL_PIIX4_SLAVE_ICW2, CYGNUM_HAL_INTERRUPT_CTRL2_BASE - CYGNUM_HAL_INTERRUPT_EXTERNAL_BASE);
170
    HAL_WRITE_UINT8(HAL_PIIX4_SLAVE_ICW3, HAL_PIIX4_ICW3_SLAVE);
171
    HAL_WRITE_UINT8(HAL_PIIX4_SLAVE_ICW4, HAL_PIIX4_ICW4_UPMODE);
172
 
173
    // Mask all sources
174
    HAL_WRITE_UINT8(HAL_PIIX4_MASTER_OCW1,
175
                    0xff & ~(1<<(CYGNUM_HAL_INTERRUPT_CASCADE-CYGNUM_HAL_INTERRUPT_CTRL1_BASE)));
176
    HAL_WRITE_UINT8(HAL_PIIX4_SLAVE_OCW1, 0xff);
177
 
178
    // Set PCI interrupt routing and set those interrupts to level
179
    // sense as per 4.1.10 page 59 in 82371AB doc.
180
    v = ( (CYGNUM_HAL_INTERRUPT_PCI_AB-CYGNUM_HAL_INTERRUPT_EXTERNAL_BASE) <<  0
181
         |(CYGNUM_HAL_INTERRUPT_PCI_AB-CYGNUM_HAL_INTERRUPT_EXTERNAL_BASE) <<  8
182
         |(CYGNUM_HAL_INTERRUPT_PCI_CD-CYGNUM_HAL_INTERRUPT_EXTERNAL_BASE) << 16
183
          |(CYGNUM_HAL_INTERRUPT_PCI_CD-CYGNUM_HAL_INTERRUPT_EXTERNAL_BASE) << 24);
184
    cyg_hal_plf_pci_cfg_write_dword(0, CYG_PCI_DEV_MAKE_DEVFN(_PIIX4_PCI_ID,0),
185
                                    CYG_PCI_CFG_PIIX4_PIRQR, v);
186
 
187
    HAL_READ_UINT8(HAL_PIIX4_ELCR2, v);
188
    v |= (1 << (CYGNUM_HAL_INTERRUPT_PCI_AB-CYGNUM_HAL_INTERRUPT_CTRL2_BASE))
189
        |(1 << (CYGNUM_HAL_INTERRUPT_PCI_CD-CYGNUM_HAL_INTERRUPT_CTRL2_BASE));
190
    HAL_WRITE_UINT8(HAL_PIIX4_ELCR2, v);
191
 
192
    // Let south bridge interrupt
193
    HAL_INTERRUPT_UNMASK(CYGNUM_HAL_INTERRUPT_SOUTH_BRIDGE_INTR);
194
}
195
 
196
/*------------------------------------------------------------------------*/
197
/* PCI support                                                            */
198
#if defined(CYGPKG_IO_PCI)
199
 
200
#define PCIMEM_START    0x08000000 // PCI memory address
201
#define PCIMEM_SIZE     0x10000000 //   256 MByte
202
#define PCIIO_START     0x18000000 // PCI io address
203
#define PCIIO_SIZE      0x03E00000 //    62 MByte
204
 
205
static int __check_bar(cyg_uint32 addr, cyg_uint32 size)
206
{
207
    int n;
208
 
209
    for (n = 0; n <= 31; n++)
210
        if (size == (1 << n)) {
211
            /* Check that address is naturally aligned */
212
            if (addr != (addr & ~(size-1)))
213
                return 0;
214
            return size - 1;
215
        }
216
    return 0;
217
}
218
 
219
 
220
// One-time PCI initialization.
221
 
222
void cyg_hal_plf_pci_init(void)
223
{
224
    cyg_uint32 bar_ena, start10, start32, end, size;
225
    cyg_uint8  next_bus;
226
    cyg_uint32 v;
227
 
228
 
229
    static int initialized = 0;
230
    if (initialized) return;
231
    initialized = 1;
232
 
233
    // Setup for bus mastering
234
    cyg_hal_plf_pci_cfg_write_dword(0, CYG_PCI_DEV_MAKE_DEVFN(0,0),
235
                                    CYG_PCI_CFG_COMMAND,
236
                                    CYG_PCI_CFG_COMMAND_IO |
237
                                    CYG_PCI_CFG_COMMAND_MEMORY |
238
                                    CYG_PCI_CFG_COMMAND_MASTER |
239
                                    CYG_PCI_CFG_COMMAND_PARITY |
240
                                    CYG_PCI_CFG_COMMAND_SERR);
241
 
242
    // Setup latency timer field
243
    cyg_hal_plf_pci_cfg_write_byte(0, CYG_PCI_DEV_MAKE_DEVFN(0,0),
244
                                   CYG_PCI_CFG_LATENCY_TIMER, 6);
245
 
246
    // Disable all BARs
247
    bar_ena = 0x1ff;
248
 
249
    // Check for active SCS10
250
    start10 = HAL_GALILEO_GETREG(HAL_GALILEO_SCS10_LD_OFFSET) << 21;
251
    end   = ((HAL_GALILEO_GETREG(HAL_GALILEO_SCS10_HD_OFFSET) & 0x7f) + 1) << 21;
252
    if (end > start10) {
253
        if ((size = __check_bar(start10, end - start10)) != 0) {
254
            // Enable BAR
255
            HAL_GALILEO_PUTREG(HAL_GALILEO_PCI0_SCS10_SIZE_OFFSET, size);
256
            bar_ena &= ~HAL_GALILEO_BAR_ENA_SCS10;
257
        }
258
    }
259
 
260
    // Check for active SCS32
261
    start32 = HAL_GALILEO_GETREG(HAL_GALILEO_SCS32_LD_OFFSET) << 21;
262
    end   = ((HAL_GALILEO_GETREG(HAL_GALILEO_SCS32_HD_OFFSET) & 0x7f) + 1) << 21;
263
    if (end > start32) {
264
        if ((size = __check_bar(start32, end - start32)) != 0) {
265
            // Enable BAR
266
            HAL_GALILEO_PUTREG(HAL_GALILEO_PCI0_SCS32_SIZE_OFFSET, size);
267
            bar_ena &= ~HAL_GALILEO_BAR_ENA_SCS32;
268
        }
269
    }
270
 
271
    bar_ena &= ~HAL_GALILEO_BAR_ENA_SCS10;
272
    HAL_GALILEO_PUTREG(HAL_GALILEO_BAR_ENA_OFFSET, bar_ena);
273
 
274
 
275
    cyg_hal_plf_pci_cfg_write_dword(0, CYG_PCI_DEV_MAKE_DEVFN(0,0),
276
                                    CYG_PCI_CFG_BAR_0, 0xffffffff);
277
 
278
    end = cyg_hal_plf_pci_cfg_read_dword(0, CYG_PCI_DEV_MAKE_DEVFN(0,0),
279
                                         CYG_PCI_CFG_BAR_0);
280
 
281
    cyg_hal_plf_pci_cfg_write_dword(0, CYG_PCI_DEV_MAKE_DEVFN(0,0),
282
                                    CYG_PCI_CFG_BAR_0, start10);
283
 
284
 
285
    cyg_hal_plf_pci_cfg_write_dword(0, CYG_PCI_DEV_MAKE_DEVFN(0,0),
286
                                    CYG_PCI_CFG_BAR_1, 0xffffffff);
287
 
288
    end = cyg_hal_plf_pci_cfg_read_dword(0, CYG_PCI_DEV_MAKE_DEVFN(0,0),
289
                                         CYG_PCI_CFG_BAR_1);
290
 
291
    cyg_hal_plf_pci_cfg_write_dword(0, CYG_PCI_DEV_MAKE_DEVFN(0,0),
292
                                    CYG_PCI_CFG_BAR_1, start32);
293
 
294
 
295
    // enable ISA bridge on PIIX4
296
    v = cyg_hal_plf_pci_cfg_read_dword(0, CYG_PCI_DEV_MAKE_DEVFN(_PIIX4_PCI_ID,_PIIX4_BRIDGE),
297
                                       CYG_PCI_CFG_PIIX4_GENCFG);
298
    v |= CYG_PCI_CFG_PIIX4_GENCFG_ISA;
299
    cyg_hal_plf_pci_cfg_write_dword(0, CYG_PCI_DEV_MAKE_DEVFN(_PIIX4_PCI_ID,_PIIX4_BRIDGE),
300
                                    CYG_PCI_CFG_PIIX4_GENCFG, v);
301
 
302
 
303
    v = cyg_hal_plf_pci_cfg_read_byte(0, CYG_PCI_DEV_MAKE_DEVFN(_PIIX4_PCI_ID,_PIIX4_BRIDGE),
304
                                      CYG_PCI_CFG_PIIX4_TOM);
305
    v &= ~CYG_PCI_CFG_PIIX4_TOM_TOM_MASK;
306
    v |= CYG_PCI_CFG_PIIX4_TOM_TOM_16M;
307
    cyg_hal_plf_pci_cfg_write_byte(0, CYG_PCI_DEV_MAKE_DEVFN(_PIIX4_PCI_ID,_PIIX4_BRIDGE),
308
                                   CYG_PCI_CFG_PIIX4_TOM, v);
309
 
310
    cyg_pci_init();
311
    // Configure PCI bus.
312
    next_bus = 1;
313
    cyg_pci_configure_bus(0, &next_bus);
314
}
315
 
316
 
317
// Check for configuration error.
318
static int pci_config_errcheck(void)
319
{
320
    cyg_uint32  irq;
321
 
322
    // Check for master or target abort
323
    irq = HAL_GALILEO_GETREG(HAL_GALILEO_IRQ_CAUSE_OFFSET);
324
 
325
    if (irq & (HAL_GALILEO_IRQCAUSE_MASABT | HAL_GALILEO_IRQCAUSE_TARABT)) {
326
        // Error. Clear bits.
327
        HAL_GALILEO_PUTREG(HAL_GALILEO_IRQ_CAUSE_OFFSET,
328
                           ~(HAL_GALILEO_IRQCAUSE_MASABT | HAL_GALILEO_IRQCAUSE_TARABT));
329
        return 1;
330
    }
331
    return 0;
332
}
333
 
334
cyg_uint32 cyg_hal_plf_pci_cfg_read_dword (cyg_uint32 bus,
335
                                           cyg_uint32 devfn,
336
                                           cyg_uint32 offset)
337
{
338
    cyg_uint32 config_data;
339
 
340
    HAL_GALILEO_PUTREG(HAL_GALILEO_PCI0_CONFIG_ADDR_OFFSET,
341
                       HAL_GALILEO_PCI0_CONFIG_ADDR_ENABLE |
342
                       (bus << 16) | (devfn << 8) | offset);
343
 
344
    config_data = HAL_GALILEO_GETREG(HAL_GALILEO_PCI0_CONFIG_DATA_OFFSET);
345
 
346
    if (pci_config_errcheck())
347
        return 0xffffffff;
348
    return config_data;
349
}
350
 
351
cyg_uint16 cyg_hal_plf_pci_cfg_read_word (cyg_uint32 bus,
352
                                          cyg_uint32 devfn,
353
                                          cyg_uint32 offset)
354
{
355
    cyg_uint32 config_dword;
356
 
357
    HAL_GALILEO_PUTREG(HAL_GALILEO_PCI0_CONFIG_ADDR_OFFSET,
358
                       HAL_GALILEO_PCI0_CONFIG_ADDR_ENABLE |
359
                       (bus << 16) | (devfn << 8) | (offset & ~3));
360
 
361
    config_dword = HAL_GALILEO_GETREG(HAL_GALILEO_PCI0_CONFIG_DATA_OFFSET);
362
 
363
    if (pci_config_errcheck())
364
        return 0xffff;
365
    return (cyg_uint16)((config_dword >> ((offset & 3) * 8)) & 0xffff);
366
}
367
 
368
cyg_uint8 cyg_hal_plf_pci_cfg_read_byte (cyg_uint32 bus,
369
                                         cyg_uint32 devfn,
370
                                         cyg_uint32 offset)
371
{
372
    cyg_uint32 config_dword;
373
 
374
    HAL_GALILEO_PUTREG(HAL_GALILEO_PCI0_CONFIG_ADDR_OFFSET,
375
                       HAL_GALILEO_PCI0_CONFIG_ADDR_ENABLE |
376
                       (bus << 16) | (devfn << 8) | (offset & ~3));
377
 
378
    config_dword = HAL_GALILEO_GETREG(HAL_GALILEO_PCI0_CONFIG_DATA_OFFSET);
379
 
380
    if (pci_config_errcheck())
381
        return 0xff;
382
    return (cyg_uint8)((config_dword >> ((offset & 3) * 8)) & 0xff);
383
}
384
 
385
void cyg_hal_plf_pci_cfg_write_dword (cyg_uint32 bus,
386
                                      cyg_uint32 devfn,
387
                                      cyg_uint32 offset,
388
                                      cyg_uint32 data)
389
{
390
    HAL_GALILEO_PUTREG(HAL_GALILEO_PCI0_CONFIG_ADDR_OFFSET,
391
                       HAL_GALILEO_PCI0_CONFIG_ADDR_ENABLE |
392
                       (bus << 16) | (devfn << 8) | offset);
393
 
394
    HAL_GALILEO_PUTREG(HAL_GALILEO_PCI0_CONFIG_DATA_OFFSET, data);
395
 
396
    (void)pci_config_errcheck();
397
}
398
 
399
void cyg_hal_plf_pci_cfg_write_word (cyg_uint32 bus,
400
                                     cyg_uint32 devfn,
401
                                     cyg_uint32 offset,
402
                                     cyg_uint16 data)
403
{
404
    cyg_uint32 config_dword, shift;
405
 
406
    HAL_GALILEO_PUTREG(HAL_GALILEO_PCI0_CONFIG_ADDR_OFFSET,
407
                       HAL_GALILEO_PCI0_CONFIG_ADDR_ENABLE |
408
                       (bus << 16) | (devfn << 8) | (offset & ~3));
409
 
410
    config_dword = HAL_GALILEO_GETREG(HAL_GALILEO_PCI0_CONFIG_DATA_OFFSET);
411
    if (pci_config_errcheck())
412
        return;
413
 
414
    shift = (offset & 3) * 8;
415
    config_dword &= ~(0xffff << shift);
416
    config_dword |= (data << shift);
417
 
418
    HAL_GALILEO_PUTREG(HAL_GALILEO_PCI0_CONFIG_DATA_OFFSET, config_dword);
419
 
420
    (void)pci_config_errcheck();
421
}
422
 
423
void cyg_hal_plf_pci_cfg_write_byte (cyg_uint32 bus,
424
                                     cyg_uint32 devfn,
425
                                     cyg_uint32 offset,
426
                                     cyg_uint8  data)
427
{
428
    cyg_uint32 config_dword, shift;
429
 
430
    HAL_GALILEO_PUTREG(HAL_GALILEO_PCI0_CONFIG_ADDR_OFFSET,
431
                       HAL_GALILEO_PCI0_CONFIG_ADDR_ENABLE |
432
                       (bus << 16) | (devfn << 8) | (offset & ~3));
433
 
434
    config_dword = HAL_GALILEO_GETREG(HAL_GALILEO_PCI0_CONFIG_DATA_OFFSET);
435
    if (pci_config_errcheck())
436
        return;
437
 
438
    shift = (offset & 3) * 8;
439
    config_dword &= ~(0xff << shift);
440
    config_dword |= (data << shift);
441
 
442
    HAL_GALILEO_PUTREG(HAL_GALILEO_PCI0_CONFIG_DATA_OFFSET, config_dword);
443
 
444
    (void)pci_config_errcheck();
445
}
446
#endif  // defined(CYGPKG_IO_PCI)
447
 
448
 
449
/*------------------------------------------------------------------------*/
450
/* IDE support                                                            */
451
 
452
int
453
cyg_hal_plf_ide_init(void)
454
{
455
    cyg_uint32 v;
456
 
457
    // enable IDE
458
    v = cyg_hal_plf_pci_cfg_read_dword(0, CYG_PCI_DEV_MAKE_DEVFN(_PIIX4_PCI_ID,_PIIX4_IDE),
459
                                       CYG_PCI_CFG_PIIX4_IDETIM);
460
    v |= (CYG_PCI_CFG_PIIX4_IDETIM_IDE << 16) | CYG_PCI_CFG_PIIX4_IDETIM_IDE;
461
    cyg_hal_plf_pci_cfg_write_dword(0, CYG_PCI_DEV_MAKE_DEVFN(_PIIX4_PCI_ID,_PIIX4_IDE),
462
                                    CYG_PCI_CFG_PIIX4_IDETIM, v);
463
    return HAL_IDE_NUM_CONTROLLERS;
464
}
465
 
466
 
467
/*------------------------------------------------------------------------*/
468
/* End of plf_misc.c                                                      */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.