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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [packages/] [hal/] [sh/] [dreamcast/] [v2_0/] [src/] [dreamcast_pci.c] - Blame information for rev 454

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 27 unneback
//=============================================================================
2
//
3
//      dreamcast_pci.c
4
//
5
//      Dreamcast PCI code 
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 Red Hat, 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 version.
16
//
17
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
19
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
20
// for more details.
21
//
22
// You should have received a copy of the GNU General Public License along
23
// with eCos; if not, write to the Free Software Foundation, Inc.,
24
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
25
//
26
// As a special exception, if other files instantiate templates or use macros
27
// or inline functions from this file, or you compile this file and link it
28
// with other works to produce a work based on this file, this file does not
29
// by itself cause the resulting work to be covered by the GNU General Public
30
// License. However the source code for this file must still be made available
31
// in accordance with section (3) of the GNU General Public License.
32
//
33
// This exception does not invalidate any other reasons why a work based on
34
// this file might be covered by the GNU General Public License.
35
//
36
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
37
// at http://sources.redhat.com/ecos/ecos-license/
38
// -------------------------------------------
39
//####ECOSGPLCOPYRIGHTEND####
40
//=============================================================================
41
//#####DESCRIPTIONBEGIN####
42
//
43
// Author(s):   t@keshi.org
44
// Contributors:t@keshi.org
45
// Date:        2001-07-30
46
// Purpose:     Dreamcast PCI code
47
//              
48
//####DESCRIPTIONEND####
49
//
50
//=============================================================================
51
 
52
#include <pkgconf/hal.h>
53
#include <pkgconf/system.h>
54
#include CYGBLD_HAL_PLATFORM_H
55
#include CYGHWR_MEMORY_LAYOUT_H
56
 
57
#include <cyg/infra/cyg_type.h>         // base types
58
#include <cyg/infra/cyg_trac.h>         // tracing macros
59
#include <cyg/infra/cyg_ass.h>          // assertion macros
60
 
61
#include <cyg/hal/hal_io.h>             // IO macros
62
#include <cyg/hal/hal_if.h>             // calling interface API
63
#include <cyg/hal/hal_arch.h>           // Register state info
64
#include <cyg/hal/hal_diag.h>
65
#include <cyg/hal/hal_intr.h>           // Interrupt names
66
#include <cyg/hal/hal_cache.h>
67
#include <cyg/io/pci_hw.h>
68
#include <cyg/io/pci.h>
69
 
70
#define GAPSPCI_REGS            0xa1001400
71
#define GAPSPCI_DMA_BASE        0x01840000
72
#define GAPSPCI_DMA_SIZE        32768
73
#define GAPSPCI_BBA_CONFIG      0xa1001600
74
#define GAPSPCI_INTC            0xa05f6924
75
 
76
static cyg_bool gapspci_initialized;
77
 
78
void cyg_hal_plf_pci_init(void)
79
{
80
        int i;
81
        cyg_uint32 val;
82
#if 0
83
        char idbuf[16];
84
 
85
        for(i=0; i<16; i++)
86
                HAL_READ_UINT8(GAPSPCI_REGS+i, idbuf[i]);
87
 
88
        if(strncmp(idbuf, "GAPSPCI_BRIDGE_2", 16))
89
                return;
90
#endif
91
 
92
        gapspci_initialized = false;
93
 
94
        HAL_WRITE_UINT32(GAPSPCI_REGS+0x18, 0x5a14a501);
95
 
96
        for(i=0; i<1000000; i++);
97
 
98
        HAL_READ_UINT32(GAPSPCI_REGS+0x18, val);
99
        if (val != 1) return;
100
 
101
        HAL_WRITE_UINT32(GAPSPCI_REGS+0x20, 0x01000000);
102
        HAL_WRITE_UINT32(GAPSPCI_REGS+0x24, 0x01000000);
103
 
104
        HAL_WRITE_UINT32(GAPSPCI_REGS+0x28, GAPSPCI_DMA_BASE);
105
        HAL_WRITE_UINT32(GAPSPCI_REGS+0x2c, GAPSPCI_DMA_BASE+GAPSPCI_DMA_SIZE);
106
 
107
        HAL_WRITE_UINT32(GAPSPCI_REGS+0x14, 1);
108
        HAL_WRITE_UINT32(GAPSPCI_REGS+0x34, 1);
109
 
110
#if 1
111
        /* Setting up Broadband Adapter */
112
        HAL_WRITE_UINT16(GAPSPCI_BBA_CONFIG+0x06, 0xf900);
113
        HAL_WRITE_UINT32(GAPSPCI_BBA_CONFIG+0x30, 0x00000000);
114
        HAL_WRITE_UINT8 (GAPSPCI_BBA_CONFIG+0x3c, 0x00);
115
        HAL_WRITE_UINT8 (GAPSPCI_BBA_CONFIG+0x0d, 0xf0);
116
        HAL_WRITE_UINT16(GAPSPCI_BBA_CONFIG+0x04, 0x0006);
117
        HAL_WRITE_UINT32(GAPSPCI_BBA_CONFIG+0x10, 0x00002001);
118
        HAL_WRITE_UINT32(GAPSPCI_BBA_CONFIG+0x14, 0x01000000);
119
#endif
120
 
121
        /* Enable interrupt */
122
        HAL_READ_UINT32(GAPSPCI_INTC, val);
123
        val |= (1<<3);
124
        HAL_WRITE_UINT32(GAPSPCI_INTC, val);
125
 
126
        gapspci_initialized = true;
127
}
128
 
129
 
130
#define BBA_SELECTED(bus, devfn) (bus==0 && devfn==0)
131
 
132
cyg_uint32 cyg_hal_plf_pci_cfg_read_dword (cyg_uint32 bus,
133
                                           cyg_uint32 devfn,
134
                                           cyg_uint32 offset)
135
{
136
        cyg_uint32 val;
137
        if (!gapspci_initialized || !BBA_SELECTED(bus, devfn))
138
                return 0xffffffff;
139
        HAL_READ_UINT32(GAPSPCI_BBA_CONFIG+offset, val);
140
        return val;
141
}
142
 
143
 
144
cyg_uint16 cyg_hal_plf_pci_cfg_read_word  (cyg_uint32 bus,
145
                                           cyg_uint32 devfn,
146
                                           cyg_uint32 offset)
147
{
148
        cyg_uint16 val;
149
        if (!gapspci_initialized || !BBA_SELECTED(bus, devfn))
150
                return 0xffff;
151
        HAL_READ_UINT16(GAPSPCI_BBA_CONFIG+offset, val);
152
        return val;
153
}
154
 
155
 
156
cyg_uint8 cyg_hal_plf_pci_cfg_read_byte   (cyg_uint32 bus,
157
                                           cyg_uint32 devfn,
158
                                           cyg_uint32 offset)
159
{
160
        cyg_uint8 val;
161
        if (!gapspci_initialized || !BBA_SELECTED(bus, devfn))
162
                return 0xff;
163
        HAL_READ_UINT8(GAPSPCI_BBA_CONFIG+offset, val);
164
        return val;
165
}
166
 
167
 
168
void cyg_hal_plf_pci_cfg_write_dword (cyg_uint32 bus,
169
                                      cyg_uint32 devfn,
170
                                      cyg_uint32 offset,
171
                                      cyg_uint32 val)
172
{
173
        if (gapspci_initialized && BBA_SELECTED(bus, devfn))
174
                HAL_WRITE_UINT32(GAPSPCI_BBA_CONFIG+offset, val);
175
}
176
 
177
 
178
void cyg_hal_plf_pci_cfg_write_word  (cyg_uint32 bus,
179
                                      cyg_uint32 devfn,
180
                                      cyg_uint32 offset,
181
                                      cyg_uint16 val)
182
{
183
        if (gapspci_initialized && BBA_SELECTED(bus, devfn))
184
                HAL_WRITE_UINT16(GAPSPCI_BBA_CONFIG+offset, val);
185
}
186
 
187
 
188
void cyg_hal_plf_pci_cfg_write_byte   (cyg_uint32 bus,
189
                                       cyg_uint32 devfn,
190
                                       cyg_uint32 offset,
191
                                       cyg_uint8 val)
192
{
193
        if (gapspci_initialized && BBA_SELECTED(bus, devfn))
194
                HAL_WRITE_UINT8(GAPSPCI_BBA_CONFIG+offset, val);
195
}
196
 
197
//-----------------------------------------------------------------------------
198
// End of dreamcast_pci.c

powered by: WebSVN 2.1.0

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