.. | .. |
---|
1277 | 1277 | u32 *bRGA_ALPHA_CTRL0; |
---|
1278 | 1278 | u32 *bRGA_ALPHA_CTRL1; |
---|
1279 | 1279 | u32 *bRGA_FADING_CTRL; |
---|
1280 | | - u32 reg0 = 0; |
---|
1281 | | - u32 reg1 = 0; |
---|
| 1280 | + u32 reg = 0; |
---|
| 1281 | + union rga2_color_ctrl color_ctrl; |
---|
| 1282 | + union rga2_alpha_ctrl alpha_ctrl; |
---|
| 1283 | + struct rga_alpha_config *config; |
---|
1282 | 1284 | |
---|
1283 | 1285 | bRGA_ALPHA_CTRL0 = (u32 *) (base + RGA2_ALPHA_CTRL0_OFFSET); |
---|
1284 | 1286 | bRGA_ALPHA_CTRL1 = (u32 *) (base + RGA2_ALPHA_CTRL1_OFFSET); |
---|
1285 | 1287 | bRGA_FADING_CTRL = (u32 *) (base + RGA2_FADING_CTRL_OFFSET); |
---|
1286 | 1288 | |
---|
1287 | | - reg0 = |
---|
1288 | | - ((reg0 & (~m_RGA2_ALPHA_CTRL0_SW_ALPHA_ROP_0)) | |
---|
| 1289 | + color_ctrl.value = 0; |
---|
| 1290 | + alpha_ctrl.value = 0; |
---|
| 1291 | + config = &msg->alpha_config; |
---|
| 1292 | + |
---|
| 1293 | + color_ctrl.bits.src_color_mode = |
---|
| 1294 | + config->fg_pre_multiplied ? RGA_ALPHA_PRE_MULTIPLIED : RGA_ALPHA_NO_PRE_MULTIPLIED; |
---|
| 1295 | + color_ctrl.bits.dst_color_mode = |
---|
| 1296 | + config->bg_pre_multiplied ? RGA_ALPHA_PRE_MULTIPLIED : RGA_ALPHA_NO_PRE_MULTIPLIED; |
---|
| 1297 | + |
---|
| 1298 | + if (config->fg_pixel_alpha_en) |
---|
| 1299 | + color_ctrl.bits.src_blend_mode = |
---|
| 1300 | + config->fg_global_alpha_en ? RGA_ALPHA_PER_PIXEL_GLOBAL : |
---|
| 1301 | + RGA_ALPHA_PER_PIXEL; |
---|
| 1302 | + else |
---|
| 1303 | + color_ctrl.bits.src_blend_mode = RGA_ALPHA_GLOBAL; |
---|
| 1304 | + |
---|
| 1305 | + if (config->bg_pixel_alpha_en) |
---|
| 1306 | + color_ctrl.bits.dst_blend_mode = |
---|
| 1307 | + config->bg_global_alpha_en ? RGA_ALPHA_PER_PIXEL_GLOBAL : |
---|
| 1308 | + RGA_ALPHA_PER_PIXEL; |
---|
| 1309 | + else |
---|
| 1310 | + color_ctrl.bits.dst_blend_mode = RGA_ALPHA_GLOBAL; |
---|
| 1311 | + |
---|
| 1312 | + /* |
---|
| 1313 | + * Since the hardware uses 256 as 1, the original alpha value needs to |
---|
| 1314 | + * be + (alpha >> 7). |
---|
| 1315 | + */ |
---|
| 1316 | + color_ctrl.bits.src_alpha_cal_mode = RGA_ALPHA_SATURATION; |
---|
| 1317 | + color_ctrl.bits.dst_alpha_cal_mode = RGA_ALPHA_SATURATION; |
---|
| 1318 | + |
---|
| 1319 | + /* porter duff alpha enable */ |
---|
| 1320 | + switch (config->mode) { |
---|
| 1321 | + case RGA_ALPHA_BLEND_SRC: |
---|
| 1322 | + /* |
---|
| 1323 | + * SRC mode: |
---|
| 1324 | + * Sf = 1, Df = 0; |
---|
| 1325 | + * [Rc,Ra] = [Sc,Sa]; |
---|
| 1326 | + */ |
---|
| 1327 | + color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1328 | + color_ctrl.bits.src_factor_mode = RGA_ALPHA_ONE; |
---|
| 1329 | + |
---|
| 1330 | + color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1331 | + color_ctrl.bits.dst_factor_mode = RGA_ALPHA_ZERO; |
---|
| 1332 | + |
---|
| 1333 | + break; |
---|
| 1334 | + |
---|
| 1335 | + case RGA_ALPHA_BLEND_DST: |
---|
| 1336 | + /* |
---|
| 1337 | + * SRC mode: |
---|
| 1338 | + * Sf = 0, Df = 1; |
---|
| 1339 | + * [Rc,Ra] = [Dc,Da]; |
---|
| 1340 | + */ |
---|
| 1341 | + color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1342 | + color_ctrl.bits.src_factor_mode = RGA_ALPHA_ZERO; |
---|
| 1343 | + |
---|
| 1344 | + color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1345 | + color_ctrl.bits.dst_factor_mode = RGA_ALPHA_ONE; |
---|
| 1346 | + |
---|
| 1347 | + break; |
---|
| 1348 | + |
---|
| 1349 | + case RGA_ALPHA_BLEND_SRC_OVER: |
---|
| 1350 | + /* |
---|
| 1351 | + * SRC-OVER mode: |
---|
| 1352 | + * Sf = 1, Df = (1 - Sa) |
---|
| 1353 | + * [Rc,Ra] = [ Sc + (1 - Sa) * Dc, Sa + (1 - Sa) * Da ] |
---|
| 1354 | + */ |
---|
| 1355 | + color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1356 | + color_ctrl.bits.src_factor_mode = RGA_ALPHA_ONE; |
---|
| 1357 | + |
---|
| 1358 | + color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1359 | + color_ctrl.bits.dst_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; |
---|
| 1360 | + |
---|
| 1361 | + break; |
---|
| 1362 | + |
---|
| 1363 | + case RGA_ALPHA_BLEND_DST_OVER: |
---|
| 1364 | + /* |
---|
| 1365 | + * DST-OVER mode: |
---|
| 1366 | + * Sf = (1 - Da) , Df = 1 |
---|
| 1367 | + * [Rc,Ra] = [ Sc * (1 - Da) + Dc, Sa * (1 - Da) + Da ] |
---|
| 1368 | + */ |
---|
| 1369 | + color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1370 | + color_ctrl.bits.src_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; |
---|
| 1371 | + |
---|
| 1372 | + color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1373 | + color_ctrl.bits.dst_factor_mode = RGA_ALPHA_ONE; |
---|
| 1374 | + |
---|
| 1375 | + break; |
---|
| 1376 | + |
---|
| 1377 | + case RGA_ALPHA_BLEND_SRC_IN: |
---|
| 1378 | + /* |
---|
| 1379 | + * SRC-IN mode: |
---|
| 1380 | + * Sf = Da , Df = 0 |
---|
| 1381 | + * [Rc,Ra] = [ Sc * Da, Sa * Da ] |
---|
| 1382 | + */ |
---|
| 1383 | + color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1384 | + color_ctrl.bits.src_factor_mode = RGA_ALPHA_OPPOSITE; |
---|
| 1385 | + |
---|
| 1386 | + color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1387 | + color_ctrl.bits.dst_factor_mode = RGA_ALPHA_ZERO; |
---|
| 1388 | + |
---|
| 1389 | + break; |
---|
| 1390 | + |
---|
| 1391 | + case RGA_ALPHA_BLEND_DST_IN: |
---|
| 1392 | + /* |
---|
| 1393 | + * DST-IN mode: |
---|
| 1394 | + * Sf = 0 , Df = Sa |
---|
| 1395 | + * [Rc,Ra] = [ Dc * Sa, Da * Sa ] |
---|
| 1396 | + */ |
---|
| 1397 | + color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1398 | + color_ctrl.bits.src_factor_mode = RGA_ALPHA_ZERO; |
---|
| 1399 | + |
---|
| 1400 | + color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1401 | + color_ctrl.bits.dst_factor_mode = RGA_ALPHA_OPPOSITE; |
---|
| 1402 | + |
---|
| 1403 | + break; |
---|
| 1404 | + |
---|
| 1405 | + case RGA_ALPHA_BLEND_SRC_OUT: |
---|
| 1406 | + /* |
---|
| 1407 | + * SRC-OUT mode: |
---|
| 1408 | + * Sf = (1 - Da) , Df = 0 |
---|
| 1409 | + * [Rc,Ra] = [ Sc * (1 - Da), Sa * (1 - Da) ] |
---|
| 1410 | + */ |
---|
| 1411 | + color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1412 | + color_ctrl.bits.src_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; |
---|
| 1413 | + |
---|
| 1414 | + color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1415 | + color_ctrl.bits.dst_factor_mode = RGA_ALPHA_ZERO; |
---|
| 1416 | + |
---|
| 1417 | + break; |
---|
| 1418 | + |
---|
| 1419 | + case RGA_ALPHA_BLEND_DST_OUT: |
---|
| 1420 | + /* |
---|
| 1421 | + * DST-OUT mode: |
---|
| 1422 | + * Sf = 0 , Df = (1 - Sa) |
---|
| 1423 | + * [Rc,Ra] = [ Dc * (1 - Sa), Da * (1 - Sa) ] |
---|
| 1424 | + */ |
---|
| 1425 | + color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1426 | + color_ctrl.bits.src_factor_mode = RGA_ALPHA_ZERO; |
---|
| 1427 | + |
---|
| 1428 | + color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1429 | + color_ctrl.bits.dst_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; |
---|
| 1430 | + |
---|
| 1431 | + break; |
---|
| 1432 | + |
---|
| 1433 | + case RGA_ALPHA_BLEND_SRC_ATOP: |
---|
| 1434 | + /* |
---|
| 1435 | + * SRC-ATOP mode: |
---|
| 1436 | + * Sf = Da , Df = (1 - Sa) |
---|
| 1437 | + * [Rc,Ra] = [ Sc * Da + Dc * (1 - Sa), Sa * Da + Da * (1 - Sa) ] |
---|
| 1438 | + */ |
---|
| 1439 | + color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1440 | + color_ctrl.bits.src_factor_mode = RGA_ALPHA_OPPOSITE; |
---|
| 1441 | + |
---|
| 1442 | + color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1443 | + color_ctrl.bits.dst_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; |
---|
| 1444 | + |
---|
| 1445 | + break; |
---|
| 1446 | + |
---|
| 1447 | + case RGA_ALPHA_BLEND_DST_ATOP: |
---|
| 1448 | + /* |
---|
| 1449 | + * DST-ATOP mode: |
---|
| 1450 | + * Sf = (1 - Da) , Df = Sa |
---|
| 1451 | + * [Rc,Ra] = [ Sc * (1 - Da) + Dc * Sa, Sa * (1 - Da) + Da * Sa ] |
---|
| 1452 | + */ |
---|
| 1453 | + color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1454 | + color_ctrl.bits.src_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; |
---|
| 1455 | + |
---|
| 1456 | + color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1457 | + color_ctrl.bits.dst_factor_mode = RGA_ALPHA_OPPOSITE; |
---|
| 1458 | + |
---|
| 1459 | + break; |
---|
| 1460 | + |
---|
| 1461 | + case RGA_ALPHA_BLEND_XOR: |
---|
| 1462 | + /* |
---|
| 1463 | + * DST-XOR mode: |
---|
| 1464 | + * Sf = (1 - Da) , Df = (1 - Sa) |
---|
| 1465 | + * [Rc,Ra] = [ Sc * (1 - Da) + Dc * (1 - Sa), Sa * (1 - Da) + Da * (1 - Sa) ] |
---|
| 1466 | + */ |
---|
| 1467 | + color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1468 | + color_ctrl.bits.src_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; |
---|
| 1469 | + |
---|
| 1470 | + color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1471 | + color_ctrl.bits.dst_factor_mode = RGA_ALPHA_OPPOSITE_INVERSE; |
---|
| 1472 | + |
---|
| 1473 | + break; |
---|
| 1474 | + |
---|
| 1475 | + case RGA_ALPHA_BLEND_CLEAR: |
---|
| 1476 | + /* |
---|
| 1477 | + * DST-CLEAR mode: |
---|
| 1478 | + * Sf = 0 , Df = 0 |
---|
| 1479 | + * [Rc,Ra] = [ 0, 0 ] |
---|
| 1480 | + */ |
---|
| 1481 | + color_ctrl.bits.src_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1482 | + color_ctrl.bits.src_factor_mode = RGA_ALPHA_ZERO; |
---|
| 1483 | + |
---|
| 1484 | + color_ctrl.bits.dst_alpha_mode = RGA_ALPHA_STRAIGHT; |
---|
| 1485 | + color_ctrl.bits.dst_factor_mode = RGA_ALPHA_ZERO; |
---|
| 1486 | + |
---|
| 1487 | + break; |
---|
| 1488 | + |
---|
| 1489 | + default: |
---|
| 1490 | + break; |
---|
| 1491 | + } |
---|
| 1492 | + |
---|
| 1493 | + alpha_ctrl.bits.src_blend_mode = color_ctrl.bits.src_blend_mode; |
---|
| 1494 | + alpha_ctrl.bits.dst_blend_mode = color_ctrl.bits.dst_blend_mode; |
---|
| 1495 | + |
---|
| 1496 | + alpha_ctrl.bits.src_alpha_cal_mode = color_ctrl.bits.src_alpha_cal_mode; |
---|
| 1497 | + alpha_ctrl.bits.dst_alpha_cal_mode = color_ctrl.bits.dst_alpha_cal_mode; |
---|
| 1498 | + |
---|
| 1499 | + alpha_ctrl.bits.src_alpha_mode = color_ctrl.bits.src_alpha_mode; |
---|
| 1500 | + alpha_ctrl.bits.src_factor_mode = color_ctrl.bits.src_factor_mode; |
---|
| 1501 | + |
---|
| 1502 | + alpha_ctrl.bits.dst_alpha_mode = color_ctrl.bits.dst_alpha_mode; |
---|
| 1503 | + alpha_ctrl.bits.dst_factor_mode = color_ctrl.bits.dst_factor_mode; |
---|
| 1504 | + |
---|
| 1505 | + reg = |
---|
| 1506 | + ((reg & (~m_RGA2_ALPHA_CTRL0_SW_ALPHA_ROP_0)) | |
---|
1289 | 1507 | (s_RGA2_ALPHA_CTRL0_SW_ALPHA_ROP_0(msg->alpha_rop_flag))); |
---|
1290 | | - reg0 = |
---|
1291 | | - ((reg0 & (~m_RGA2_ALPHA_CTRL0_SW_ALPHA_ROP_SEL)) | |
---|
| 1508 | + reg = |
---|
| 1509 | + ((reg & (~m_RGA2_ALPHA_CTRL0_SW_ALPHA_ROP_SEL)) | |
---|
1292 | 1510 | (s_RGA2_ALPHA_CTRL0_SW_ALPHA_ROP_SEL |
---|
1293 | 1511 | (msg->alpha_rop_flag >> 1))); |
---|
1294 | | - reg0 = |
---|
1295 | | - ((reg0 & (~m_RGA2_ALPHA_CTRL0_SW_ROP_MODE)) | |
---|
| 1512 | + reg = |
---|
| 1513 | + ((reg & (~m_RGA2_ALPHA_CTRL0_SW_ROP_MODE)) | |
---|
1296 | 1514 | (s_RGA2_ALPHA_CTRL0_SW_ROP_MODE(msg->rop_mode))); |
---|
1297 | | - reg0 = |
---|
1298 | | - ((reg0 & (~m_RGA2_ALPHA_CTRL0_SW_SRC_GLOBAL_ALPHA)) | |
---|
| 1515 | + reg = |
---|
| 1516 | + ((reg & (~m_RGA2_ALPHA_CTRL0_SW_SRC_GLOBAL_ALPHA)) | |
---|
1299 | 1517 | (s_RGA2_ALPHA_CTRL0_SW_SRC_GLOBAL_ALPHA |
---|
1300 | | - (msg->src_a_global_val))); |
---|
1301 | | - reg0 = |
---|
1302 | | - ((reg0 & (~m_RGA2_ALPHA_CTRL0_SW_DST_GLOBAL_ALPHA)) | |
---|
| 1518 | + ((uint8_t)config->fg_global_alpha_value))); |
---|
| 1519 | + reg = |
---|
| 1520 | + ((reg & (~m_RGA2_ALPHA_CTRL0_SW_DST_GLOBAL_ALPHA)) | |
---|
1303 | 1521 | (s_RGA2_ALPHA_CTRL0_SW_DST_GLOBAL_ALPHA |
---|
1304 | | - (msg->dst_a_global_val))); |
---|
| 1522 | + ((uint8_t)config->bg_global_alpha_value))); |
---|
1305 | 1523 | |
---|
1306 | | - reg1 = |
---|
1307 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_COLOR_M0)) | |
---|
1308 | | - (s_RGA2_ALPHA_CTRL1_SW_DST_COLOR_M0 |
---|
1309 | | - (msg->alpha_mode_0 >> 15))); |
---|
1310 | | - reg1 = |
---|
1311 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_COLOR_M0)) | |
---|
1312 | | - (s_RGA2_ALPHA_CTRL1_SW_SRC_COLOR_M0 |
---|
1313 | | - (msg->alpha_mode_0 >> 7))); |
---|
1314 | | - reg1 = |
---|
1315 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_FACTOR_M0)) | |
---|
1316 | | - (s_RGA2_ALPHA_CTRL1_SW_DST_FACTOR_M0 |
---|
1317 | | - (msg->alpha_mode_0 >> 12))); |
---|
1318 | | - reg1 = |
---|
1319 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_FACTOR_M0)) | |
---|
1320 | | - (s_RGA2_ALPHA_CTRL1_SW_SRC_FACTOR_M0 |
---|
1321 | | - (msg->alpha_mode_0 >> 4))); |
---|
1322 | | - reg1 = |
---|
1323 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_CAL_M0)) | |
---|
1324 | | - (s_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_CAL_M0 |
---|
1325 | | - (msg->alpha_mode_0 >> 11))); |
---|
1326 | | - reg1 = |
---|
1327 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_CAL_M0)) | |
---|
1328 | | - (s_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_CAL_M0 |
---|
1329 | | - (msg->alpha_mode_0 >> 3))); |
---|
1330 | | - reg1 = |
---|
1331 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_BLEND_M0)) | |
---|
1332 | | - (s_RGA2_ALPHA_CTRL1_SW_DST_BLEND_M0 |
---|
1333 | | - (msg->alpha_mode_0 >> 9))); |
---|
1334 | | - reg1 = |
---|
1335 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_BLEND_M0)) | |
---|
1336 | | - (s_RGA2_ALPHA_CTRL1_SW_SRC_BLEND_M0 |
---|
1337 | | - (msg->alpha_mode_0 >> 1))); |
---|
1338 | | - reg1 = |
---|
1339 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_M0)) | |
---|
1340 | | - (s_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_M0 |
---|
1341 | | - (msg->alpha_mode_0 >> 8))); |
---|
1342 | | - reg1 = |
---|
1343 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_M0)) | |
---|
1344 | | - (s_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_M0 |
---|
1345 | | - (msg->alpha_mode_0 >> 0))); |
---|
| 1524 | + *bRGA_ALPHA_CTRL0 = reg; |
---|
| 1525 | + *bRGA_ALPHA_CTRL1 = color_ctrl.value | (alpha_ctrl.value << 16); |
---|
1346 | 1526 | |
---|
1347 | | - reg1 = |
---|
1348 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_FACTOR_M1)) | |
---|
1349 | | - (s_RGA2_ALPHA_CTRL1_SW_DST_FACTOR_M1 |
---|
1350 | | - (msg->alpha_mode_1 >> 12))); |
---|
1351 | | - reg1 = |
---|
1352 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_FACTOR_M1)) | |
---|
1353 | | - (s_RGA2_ALPHA_CTRL1_SW_SRC_FACTOR_M1 |
---|
1354 | | - (msg->alpha_mode_1 >> 4))); |
---|
1355 | | - reg1 = |
---|
1356 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_CAL_M1)) | |
---|
1357 | | - (s_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_CAL_M1 |
---|
1358 | | - (msg->alpha_mode_1 >> 11))); |
---|
1359 | | - reg1 = |
---|
1360 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_CAL_M1)) | |
---|
1361 | | - (s_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_CAL_M1 |
---|
1362 | | - (msg->alpha_mode_1 >> 3))); |
---|
1363 | | - reg1 = |
---|
1364 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_BLEND_M1)) | |
---|
1365 | | - (s_RGA2_ALPHA_CTRL1_SW_DST_BLEND_M1(msg->alpha_mode_1 >> 9))); |
---|
1366 | | - reg1 = |
---|
1367 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_BLEND_M1)) | |
---|
1368 | | - (s_RGA2_ALPHA_CTRL1_SW_SRC_BLEND_M1(msg->alpha_mode_1 >> 1))); |
---|
1369 | | - reg1 = |
---|
1370 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_M1)) | |
---|
1371 | | - (s_RGA2_ALPHA_CTRL1_SW_DST_ALPHA_M1(msg->alpha_mode_1 >> 8))); |
---|
1372 | | - reg1 = |
---|
1373 | | - ((reg1 & (~m_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_M1)) | |
---|
1374 | | - (s_RGA2_ALPHA_CTRL1_SW_SRC_ALPHA_M1(msg->alpha_mode_1 >> 0))); |
---|
1375 | | - |
---|
1376 | | - *bRGA_ALPHA_CTRL0 = reg0; |
---|
1377 | | - *bRGA_ALPHA_CTRL1 = reg1; |
---|
1378 | 1527 | |
---|
1379 | 1528 | if ((msg->alpha_rop_flag >> 2) & 1) { |
---|
1380 | 1529 | *bRGA_FADING_CTRL = (1 << 24) | (msg->fading_b_value << 16) | |
---|
.. | .. |
---|
1776 | 1925 | static void rga_cmd_to_rga2_cmd(struct rga_scheduler_t *scheduler, |
---|
1777 | 1926 | struct rga_req *req_rga, struct rga2_req *req) |
---|
1778 | 1927 | { |
---|
1779 | | - u16 alpha_mode_0, alpha_mode_1; |
---|
1780 | | - |
---|
1781 | 1928 | if (req_rga->render_mode == 6) |
---|
1782 | 1929 | req->render_mode = UPDATE_PALETTE_TABLE_MODE; |
---|
1783 | 1930 | else if (req_rga->render_mode == 7) |
---|
.. | .. |
---|
1877 | 2024 | |
---|
1878 | 2025 | req->palette_mode = req_rga->palette_mode; |
---|
1879 | 2026 | req->yuv2rgb_mode = req_rga->yuv2rgb_mode; |
---|
| 2027 | + if (req_rga->full_csc.flag & 0x1) |
---|
| 2028 | + req->full_csc_en = 1; |
---|
1880 | 2029 | req->endian_mode = req_rga->endian_mode; |
---|
1881 | 2030 | req->rgb2yuv_mode = 0; |
---|
1882 | 2031 | |
---|
.. | .. |
---|
1918 | 2067 | |
---|
1919 | 2068 | if (((req_rga->alpha_rop_flag) & 1)) { |
---|
1920 | 2069 | if ((req_rga->alpha_rop_flag >> 3) & 1) { |
---|
1921 | | - /* porter duff alpha enable */ |
---|
1922 | | - switch (req_rga->PD_mode) { |
---|
1923 | | - /* dst = 0 */ |
---|
1924 | | - case 0: |
---|
1925 | | - break; |
---|
1926 | | - /* dst = src */ |
---|
1927 | | - case 1: |
---|
1928 | | - req->alpha_mode_0 = 0x0212; |
---|
1929 | | - req->alpha_mode_1 = 0x0212; |
---|
1930 | | - break; |
---|
1931 | | - /* dst = dst */ |
---|
1932 | | - case 2: |
---|
1933 | | - req->alpha_mode_0 = 0x1202; |
---|
1934 | | - req->alpha_mode_1 = 0x1202; |
---|
1935 | | - break; |
---|
1936 | | - /* dst = (256*sc + (256 - sa)*dc) >> 8 */ |
---|
1937 | | - case 3: |
---|
1938 | | - if ((req_rga->alpha_rop_mode & 3) == 0) { |
---|
1939 | | - /* both use globalAlpha. */ |
---|
1940 | | - alpha_mode_0 = 0x3010; |
---|
1941 | | - alpha_mode_1 = 0x3010; |
---|
1942 | | - } else if ((req_rga->alpha_rop_mode & 3) == 1) { |
---|
1943 | | - /* Do not use globalAlpha. */ |
---|
1944 | | - alpha_mode_0 = 0x3212; |
---|
1945 | | - alpha_mode_1 = 0x3212; |
---|
1946 | | - } else if ((req_rga->alpha_rop_mode & 3) == 2) { |
---|
1947 | | - /* |
---|
1948 | | - * dst use globalAlpha, |
---|
1949 | | - * and dst has pixelAlpha. |
---|
1950 | | - */ |
---|
1951 | | - alpha_mode_0 = 0x3014; |
---|
1952 | | - alpha_mode_1 = 0x3014; |
---|
1953 | | - } else { |
---|
1954 | | - /* |
---|
1955 | | - * dst use globalAlpha, and |
---|
1956 | | - * dst does not have pixelAlpha. |
---|
1957 | | - */ |
---|
1958 | | - alpha_mode_0 = 0x3012; |
---|
1959 | | - alpha_mode_1 = 0x3012; |
---|
1960 | | - } |
---|
1961 | | - req->alpha_mode_0 = alpha_mode_0; |
---|
1962 | | - req->alpha_mode_1 = alpha_mode_1; |
---|
1963 | | - break; |
---|
1964 | | - /* dst = (sc*(256-da) + 256*dc) >> 8 */ |
---|
1965 | | - case 4: |
---|
1966 | | - /* Do not use globalAlpha. */ |
---|
1967 | | - req->alpha_mode_0 = 0x1232; |
---|
1968 | | - req->alpha_mode_1 = 0x1232; |
---|
1969 | | - break; |
---|
1970 | | - /* dst = (da*sc) >> 8 */ |
---|
1971 | | - case 5: |
---|
1972 | | - break; |
---|
1973 | | - /* dst = (sa*dc) >> 8 */ |
---|
1974 | | - case 6: |
---|
1975 | | - break; |
---|
1976 | | - /* dst = ((256-da)*sc) >> 8 */ |
---|
1977 | | - case 7: |
---|
1978 | | - break; |
---|
1979 | | - /* dst = ((256-sa)*dc) >> 8 */ |
---|
1980 | | - case 8: |
---|
1981 | | - break; |
---|
1982 | | - /* dst = (da*sc + (256-sa)*dc) >> 8 */ |
---|
1983 | | - case 9: |
---|
1984 | | - req->alpha_mode_0 = 0x3040; |
---|
1985 | | - req->alpha_mode_1 = 0x3040; |
---|
1986 | | - break; |
---|
1987 | | - /* dst = ((256-da)*sc + (sa*dc)) >> 8 */ |
---|
1988 | | - case 10: |
---|
1989 | | - break; |
---|
1990 | | - /* dst = ((256-da)*sc + (256-sa)*dc) >> 8 */ |
---|
1991 | | - case 11: |
---|
1992 | | - break; |
---|
1993 | | - case 12: |
---|
1994 | | - req->alpha_mode_0 = 0x0010; |
---|
1995 | | - req->alpha_mode_1 = 0x0820; |
---|
1996 | | - break; |
---|
1997 | | - default: |
---|
1998 | | - break; |
---|
1999 | | - } |
---|
| 2070 | + req->alpha_config.enable = true; |
---|
2000 | 2071 | |
---|
2001 | | - if (req->osd_info.enable) { |
---|
2002 | | - /* set dst(osd_block) real color mode */ |
---|
2003 | | - if (req->alpha_mode_0 & (0x01 << 9)) |
---|
2004 | | - req->alpha_mode_0 |= (1 << 15); |
---|
2005 | | - } |
---|
2006 | | - |
---|
2007 | | - /* Real color mode */ |
---|
2008 | 2072 | if ((req_rga->alpha_rop_flag >> 9) & 1) { |
---|
2009 | | - if (req->alpha_mode_0 & (0x01 << 1)) |
---|
2010 | | - req->alpha_mode_0 |= (1 << 7); |
---|
2011 | | - if (req->alpha_mode_0 & (0x01 << 9)) |
---|
2012 | | - req->alpha_mode_0 |= (1 << 15); |
---|
| 2073 | + req->alpha_config.fg_pre_multiplied = false; |
---|
| 2074 | + req->alpha_config.bg_pre_multiplied = false; |
---|
| 2075 | + } else if (req->osd_info.enable) { |
---|
| 2076 | + req->alpha_config.fg_pre_multiplied = true; |
---|
| 2077 | + /* set dst(osd_block) real color mode */ |
---|
| 2078 | + req->alpha_config.bg_pre_multiplied = false; |
---|
| 2079 | + } else { |
---|
| 2080 | + req->alpha_config.fg_pre_multiplied = true; |
---|
| 2081 | + req->alpha_config.bg_pre_multiplied = true; |
---|
2013 | 2082 | } |
---|
2014 | | - } else { |
---|
2015 | | - if ((req_rga->alpha_rop_mode & 3) == 0) { |
---|
2016 | | - req->alpha_mode_0 = 0x3040; |
---|
2017 | | - req->alpha_mode_1 = 0x3040; |
---|
2018 | | - } else if ((req_rga->alpha_rop_mode & 3) == 1) { |
---|
2019 | | - req->alpha_mode_0 = 0x3042; |
---|
2020 | | - req->alpha_mode_1 = 0x3242; |
---|
2021 | | - } else if ((req_rga->alpha_rop_mode & 3) == 2) { |
---|
2022 | | - req->alpha_mode_0 = 0x3044; |
---|
2023 | | - req->alpha_mode_1 = 0x3044; |
---|
| 2083 | + |
---|
| 2084 | + req->alpha_config.fg_pixel_alpha_en = rga_is_alpha_format(req->src.format); |
---|
| 2085 | + if (req->bitblt_mode) |
---|
| 2086 | + req->alpha_config.bg_pixel_alpha_en = |
---|
| 2087 | + rga_is_alpha_format(req->src1.format); |
---|
| 2088 | + else |
---|
| 2089 | + req->alpha_config.bg_pixel_alpha_en = |
---|
| 2090 | + rga_is_alpha_format(req->dst.format); |
---|
| 2091 | + |
---|
| 2092 | + if (req_rga->feature.global_alpha_en) { |
---|
| 2093 | + if (req_rga->fg_global_alpha < 0xff) { |
---|
| 2094 | + req->alpha_config.fg_global_alpha_en = true; |
---|
| 2095 | + req->alpha_config.fg_global_alpha_value = |
---|
| 2096 | + req_rga->fg_global_alpha; |
---|
| 2097 | + } else if (!req->alpha_config.fg_pixel_alpha_en) { |
---|
| 2098 | + req->alpha_config.fg_global_alpha_en = true; |
---|
| 2099 | + req->alpha_config.fg_global_alpha_value = 0xff; |
---|
| 2100 | + } |
---|
| 2101 | + |
---|
| 2102 | + if (req_rga->bg_global_alpha < 0xff) { |
---|
| 2103 | + req->alpha_config.bg_global_alpha_en = true; |
---|
| 2104 | + req->alpha_config.bg_global_alpha_value = |
---|
| 2105 | + req_rga->bg_global_alpha; |
---|
| 2106 | + } else if (!req->alpha_config.bg_pixel_alpha_en) { |
---|
| 2107 | + req->alpha_config.bg_global_alpha_en = true; |
---|
| 2108 | + req->alpha_config.bg_global_alpha_value = 0xff; |
---|
| 2109 | + } |
---|
| 2110 | + } else { |
---|
| 2111 | + req->alpha_config.bg_global_alpha_value = 0xff; |
---|
| 2112 | + req->alpha_config.bg_global_alpha_value = 0xff; |
---|
2024 | 2113 | } |
---|
| 2114 | + |
---|
| 2115 | + req->alpha_config.mode = req_rga->PD_mode; |
---|
2025 | 2116 | } |
---|
2026 | 2117 | } |
---|
2027 | 2118 | |
---|
.. | .. |
---|
2094 | 2185 | } |
---|
2095 | 2186 | |
---|
2096 | 2187 | if (i == RGA_RESET_TIMEOUT) |
---|
2097 | | - pr_err("RAG2 soft reset timeout.\n"); |
---|
| 2188 | + pr_err("RAG2 core[%d] soft reset timeout.\n", scheduler->core); |
---|
2098 | 2189 | else |
---|
2099 | | - pr_info("RGA2 soft reset complete.\n"); |
---|
| 2190 | + pr_info("RGA2 core[%d] soft reset complete.\n", scheduler->core); |
---|
2100 | 2191 | |
---|
2101 | 2192 | } |
---|
2102 | 2193 | |
---|
.. | .. |
---|
2216 | 2307 | pr_info("mmu: src=%.2x src1=%.2x dst=%.2x els=%.2x\n", |
---|
2217 | 2308 | req->mmu_info.src0_mmu_flag, req->mmu_info.src1_mmu_flag, |
---|
2218 | 2309 | req->mmu_info.dst_mmu_flag, req->mmu_info.els_mmu_flag); |
---|
2219 | | - pr_info("alpha: flag %x mode0=%x mode1=%x\n", req->alpha_rop_flag, |
---|
2220 | | - req->alpha_mode_0, req->alpha_mode_1); |
---|
2221 | | - pr_info("blend mode is %s\n", |
---|
2222 | | - rga_get_blend_mode_str(req->alpha_rop_flag, req->alpha_mode_0, |
---|
2223 | | - req->alpha_mode_1)); |
---|
| 2310 | + pr_info("alpha: flag %x mode=%s\n", |
---|
| 2311 | + req->alpha_rop_flag, rga_get_blend_mode_str(req->alpha_config.mode)); |
---|
| 2312 | + pr_info("alpha: pre_multi=[%d,%d] pixl=[%d,%d] glb=[%d,%d]\n", |
---|
| 2313 | + req->alpha_config.fg_pre_multiplied, req->alpha_config.bg_pre_multiplied, |
---|
| 2314 | + req->alpha_config.fg_pixel_alpha_en, req->alpha_config.bg_pixel_alpha_en, |
---|
| 2315 | + req->alpha_config.fg_global_alpha_en, req->alpha_config.bg_global_alpha_en); |
---|
| 2316 | + pr_info("alpha: fg_global_alpha=%x bg_global_alpha=%x\n", |
---|
| 2317 | + req->alpha_config.fg_global_alpha_value, req->alpha_config.bg_global_alpha_value); |
---|
2224 | 2318 | pr_info("yuv2rgb mode is %x\n", req->yuv2rgb_mode); |
---|
2225 | 2319 | } |
---|
2226 | 2320 | |
---|
.. | .. |
---|
2239 | 2333 | memset(&req, 0x0, sizeof(req)); |
---|
2240 | 2334 | |
---|
2241 | 2335 | rga_cmd_to_rga2_cmd(scheduler, &job->rga_command_base, &req); |
---|
2242 | | - memcpy(&job->full_csc, &job->rga_command_base.full_csc, sizeof(job->full_csc)); |
---|
| 2336 | + if (req.full_csc_en) { |
---|
| 2337 | + memcpy(&job->full_csc, &job->rga_command_base.full_csc, sizeof(job->full_csc)); |
---|
| 2338 | + if (job->rga_command_base.feature.full_csc_clip_en) { |
---|
| 2339 | + memcpy(&job->full_csc_clip, &job->rga_command_base.full_csc_clip, |
---|
| 2340 | + sizeof(job->full_csc_clip)); |
---|
| 2341 | + } else { |
---|
| 2342 | + job->full_csc_clip.y.max = 0xff; |
---|
| 2343 | + job->full_csc_clip.y.min = 0x0; |
---|
| 2344 | + job->full_csc_clip.uv.max = 0xff; |
---|
| 2345 | + job->full_csc_clip.uv.min = 0x0; |
---|
| 2346 | + } |
---|
| 2347 | + |
---|
| 2348 | + } else { |
---|
| 2349 | + job->full_csc_clip.y.max = 0xff; |
---|
| 2350 | + job->full_csc_clip.y.min = 0x0; |
---|
| 2351 | + job->full_csc_clip.uv.max = 0xff; |
---|
| 2352 | + job->full_csc_clip.uv.min = 0x0; |
---|
| 2353 | + } |
---|
2243 | 2354 | memcpy(&job->pre_intr_info, &job->rga_command_base.pre_intr_info, |
---|
2244 | 2355 | sizeof(job->pre_intr_info)); |
---|
2245 | 2356 | |
---|
.. | .. |
---|
2390 | 2501 | |
---|
2391 | 2502 | static void rga2_set_reg_full_csc(struct rga_job *job, struct rga_scheduler_t *scheduler) |
---|
2392 | 2503 | { |
---|
2393 | | - uint8_t clip_y_max, clip_y_min; |
---|
2394 | | - uint8_t clip_uv_max, clip_uv_min; |
---|
2395 | | - |
---|
2396 | | - clip_y_max = 0xff; |
---|
2397 | | - clip_y_min = 0x0; |
---|
2398 | | - clip_uv_max = 0xff; |
---|
2399 | | - clip_uv_min = 0; |
---|
2400 | | - |
---|
2401 | 2504 | /* full csc coefficient */ |
---|
2402 | 2505 | /* Y coefficient */ |
---|
2403 | | - rga_write(job->full_csc.coe_y.r_v | (clip_y_max << 16) | (clip_y_min << 24), |
---|
| 2506 | + rga_write(job->full_csc.coe_y.r_v | |
---|
| 2507 | + (job->full_csc_clip.y.max << 16) | (job->full_csc_clip.y.min << 24), |
---|
2404 | 2508 | RGA2_DST_CSC_00, scheduler); |
---|
2405 | | - rga_write(job->full_csc.coe_y.g_y | (clip_uv_max << 16) | (clip_uv_min << 24), |
---|
| 2509 | + rga_write(job->full_csc.coe_y.g_y | |
---|
| 2510 | + (job->full_csc_clip.uv.max << 16) | (job->full_csc_clip.uv.min << 24), |
---|
2406 | 2511 | RGA2_DST_CSC_01, scheduler); |
---|
2407 | 2512 | rga_write(job->full_csc.coe_y.b_u, RGA2_DST_CSC_02, scheduler); |
---|
2408 | 2513 | rga_write(job->full_csc.coe_y.off, RGA2_DST_CSC_OFF0, scheduler); |
---|