Subversion Repositories Kolibri OS

Rev

Rev 885 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
808 serge 1
 
868 serge 2
812 serge 3
 
808 serge 4
5
 
6
 
7
8
 
813 serge 9
10
 
11
#       define RADEON_PLL_WR_EN             (1 << 7)
12
#       define RADEON_PLL_DIV_SEL           (3 << 8)
13
#       define RADEON_PLL2_DIV_SEL_MASK     ~(3 << 8)
14
15
 
16
#       define RADEON_FORCEON_MCLKA         (1 << 16)
17
#       define RADEON_FORCEON_MCLKB         (1 << 17)
18
#       define RADEON_FORCEON_YCLKA         (1 << 18)
19
#       define RADEON_FORCEON_YCLKB         (1 << 19)
20
#       define RADEON_FORCEON_MC            (1 << 20)
21
#       define RADEON_FORCEON_AIC           (1 << 21)
22
#       define R300_DISABLE_MC_MCLKA        (1 << 21)
23
#       define R300_DISABLE_MC_MCLKB        (1 << 21)
24
25
 
26
 
27
 
28
 
808 serge 29
 * Flush all dirty data in the Pixel Cache to memory.
30
 */
31
32
 
33
R5xx2DFlush()
34
{
35
    int i;
36
37
 
38
                R5XX_DSTCACHE_FLUSH_ALL, R5XX_DSTCACHE_FLUSH_ALL);
39
40
 
41
        if (!(INREG(R5XX_DSTCACHE_CTLSTAT) & R5XX_DSTCACHE_BUSY))
1002 serge 42
            return TRUE;
43
808 serge 44
 
45
         (unsigned int)INREG(R5XX_DSTCACHE_CTLSTAT));
46
    return FALSE;
47
}
48
49
 
50
R5xx2DIdleLocal()                                //R100-R500
51
{
52
    int i;
53
54
 
55
    for (i = 0; i < R5XX_LOOP_COUNT; i++)
56
        if (64 == (INREG(R5XX_RBBM_STATUS) & R5XX_RBBM_FIFOCNT_MASK))
1002 serge 57
            break;
58
808 serge 59
 
60
        dbgprintf("%s: FIFO Timeout 0x%08X.\n", __func__,INREG(R5XX_RBBM_STATUS));
1002 serge 61
        return FALSE;
62
    }
808 serge 63
64
 
65
    for (i = 0; i < R5XX_LOOP_COUNT; i++) {
66
        if (!(INREG(R5XX_RBBM_STATUS) & R5XX_RBBM_ACTIVE)) {
1002 serge 67
            R5xx2DFlush();
68
            return TRUE;
69
        }
70
    }
808 serge 71
    dbgprintf("%s: Idle Timeout 0x%08X.\n", __func__,INREG(R5XX_RBBM_STATUS));
72
    return FALSE;
73
}
74
75
 
76
 
77
R5xx2DSetup()
78
{
79
80
 
81
     * set them appropriately before any accel ops, but let's avoid
82
     * random bogus DMA in case we inadvertently trigger the engine
83
     * in the wrong place (happened). */
84
    R5xxFIFOWaitLocal(2);
85
    OUTREG(R5XX_DST_PITCH_OFFSET,rhd.dst_pitch_offset);
86
    OUTREG(R5XX_SRC_PITCH_OFFSET,rhd.dst_pitch_offset);
87
88
 
89
    MASKREG(R5XX_DP_DATATYPE, 0, R5XX_HOST_BIG_ENDIAN_EN);
90
91
 
92
93
 
883 serge 94
    OUTREG(R5XX_SC_TOP_LEFT, 0);
95
    OUTREG(R5XX_SC_BOTTOM_RIGHT,
96
           RADEON_DEFAULT_SC_RIGHT_MAX | RADEON_DEFAULT_SC_BOTTOM_MAX);
97
    OUTREG(R5XX_DEFAULT_SC_BOTTOM_RIGHT,
808 serge 98
           RADEON_DEFAULT_SC_RIGHT_MAX | RADEON_DEFAULT_SC_BOTTOM_MAX);
883 serge 99
100
 
808 serge 101
//    OUTREG(R5XX_DP_GUI_MASTER_CNTL, rhd.gui_control |
883 serge 102
//           R5XX_GMC_BRUSH_SOLID_COLOR | R5XX_GMC_SRC_DATATYPE_COLOR);
103
    OUTREG(R5XX_DP_CNTL, R5XX_DST_X_LEFT_TO_RIGHT | R5XX_DST_Y_TOP_TO_BOTTOM);
104
808 serge 105
 
106
    OUTREG(R5XX_DP_BRUSH_FRGD_CLR, 0xFFFFFFFF);
107
    OUTREG(R5XX_DP_BRUSH_BKGD_CLR, 0x00000000);
108
    OUTREG(R5XX_DP_SRC_FRGD_CLR, 0xFFFFFFFF);
109
    OUTREG(R5XX_DP_SRC_BKGD_CLR, 0x00000000);
110
    OUTREG(R5XX_DP_WRITE_MASK, 0xFFFFFFFF);
111
112
 
113
}
114
115
 
877 serge 116
{
808 serge 117
    if (!R5xxFIFOWaitLocal(required)) {
118
 //     R5xx2DReset();
883 serge 119
      R5xx2DSetup();
808 serge 120
    }
121
}
122
123
 
124
{
125
    if (!R5xx2DIdleLocal()) {
126
  //    R5xx2DReset();
883 serge 127
      R5xx2DSetup();
808 serge 128
    }
129
}
130
131
 
132
 
133
 
134
{
135
    u32_t base;
877 serge 136
    int screensize;
878 serge 137
    int screenpitch;
138
808 serge 139
 
878 serge 140
    screenpitch = GetScreenPitch();
141
808 serge 142
 
878 serge 143
    rhd.displayHeight = screensize & 0xFFFF;
144
145
 
808 serge 146
    rhd.__ymin = 0;
147
    rhd.__xmax = rhd.displayWidth  - 1;
148
    rhd.__ymax = rhd.displayHeight - 1;
149
150
 
151
    clip.ymin = 0;
152
    clip.xmax = rhd.displayWidth  - 1;
153
    clip.ymax = rhd.displayHeight - 1;
154
155
 
883 serge 156
               rhd.displayWidth, rhd.displayHeight);
157
808 serge 158
 
883 serge 159
                      | RADEON_GMC_CLR_CMP_CNTL_DIS
160
                      | RADEON_GMC_DST_PITCH_OFFSET_CNTL);
161
808 serge 162
 
163
164
 
165
166
 
883 serge 167
                               (rhd.fbLocation  >> 10));
168
169
 
170
 
808 serge 171
172
 
815 serge 173
    scr_pixmap.height = rhd.displayHeight;
174
    scr_pixmap.format = PICT_a8r8g8b8;
175
    scr_pixmap.flags  = PX_MEM_LOCAL;
1002 serge 176
    scr_pixmap.pitch  = rhd.displayWidth * 4     ;//screenpitch;
885 serge 177
    scr_pixmap.local  = (void*)rhd.fbLocation;
881 serge 178
    scr_pixmap.pitch_offset =  rhd.dst_pitch_offset;
815 serge 179
    scr_pixmap.mapped = (void*)0;
876 serge 180
815 serge 181
 
883 serge 182
    OUTREG(R5XX_DST_PITCH_OFFSET,rhd.dst_pitch_offset);
183
    OUTREG(R5XX_SRC_PITCH_OFFSET,rhd.dst_pitch_offset);
184
815 serge 185
 
883 serge 186
    MASKREG(R5XX_DP_DATATYPE, 0, R5XX_HOST_BIG_ENDIAN_EN);
187
808 serge 188
 
883 serge 189
808 serge 190
 
1002 serge 191
192
 
883 serge 193
1002 serge 194
 
883 serge 195
196
 
808 serge 197
198
 
199