From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark yao Subject: Re: [PATCH] drm/rockchip: Add BGR formats to VOP Date: Fri, 08 May 2015 16:40:10 +0800 Message-ID: <554C766A.8070103@rock-chips.com> References: <1431072968-12696-1-git-send-email-tfiga@chromium.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1431072968-12696-1-git-send-email-tfiga@chromium.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Tomasz Figa , dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org SGkgVG9tYXN6CiAgICAgVGhhbmtzIGZvciB0aGUgZml4LCBidXQgc29tZSByZWdpc3RlciBpcyB3 cm9uZy4KCk9uIDIwMTXlubQwNeaciDA45pelIDE2OjE2LCBUb21hc3ogRmlnYSB3cm90ZToKPiBW T1AgY2FuIHN1cHBvcnQgQkdSIGZvcm1hdHMgaW4gYWxsIHdpbmRvd3MgdGhhbmtzIHRvIHJlZC9i bHVlIHN3YXAgb3B0aW9uCj4gcHJvdmlkZWQgaW4gV0lOeF9DVFJMMCByZWdpc3RlcnMuIFRoaXMg cGF0Y2ggZW5hYmxlcyBzdXBwb3J0IGZvcgo+IEFCR1I4ODg4LCBYQkdSODg4OCwgQkdSODg4IGFu ZCBCR1I1NjUgZm9ybWF0cyBieSB1c2luZyB0aGlzIGZlYXR1cmUuCj4KPiBTaWduZWQtb2ZmLWJ5 OiBUb21hc3ogRmlnYSA8dGZpZ2FAY2hyb21pdW0ub3JnPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYyB8IDMzICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gICAxIGZpbGUgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKQo+Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMgYi9kcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCj4gaW5kZXggNDU1N2YzMy4u NDVmYTExYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBf ZHJtX3ZvcC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92 b3AuYwo+IEBAIC0xNjksNiArMTY5LDcgQEAgc3RydWN0IHZvcF93aW5fcGh5IHsKPiAgIAo+ICAg CXN0cnVjdCB2b3BfcmVnIGVuYWJsZTsKPiAgIAlzdHJ1Y3Qgdm9wX3JlZyBmb3JtYXQ7Cj4gKwlz dHJ1Y3Qgdm9wX3JlZyByYl9zd2FwOwo+ICAgCXN0cnVjdCB2b3BfcmVnIGFjdF9pbmZvOwo+ICAg CXN0cnVjdCB2b3BfcmVnIGRzcF9pbmZvOwo+ICAgCXN0cnVjdCB2b3BfcmVnIGRzcF9zdDsKPiBA QCAtMTk4LDggKzE5OSwxMiBAQCBzdHJ1Y3Qgdm9wX2RhdGEgewo+ICAgc3RhdGljIGNvbnN0IHVp bnQzMl90IGZvcm1hdHNfMDFbXSA9IHsKPiAgIAlEUk1fRk9STUFUX1hSR0I4ODg4LAo+ICAgCURS TV9GT1JNQVRfQVJHQjg4ODgsCj4gKwlEUk1fRk9STUFUX1hCR1I4ODg4LAo+ICsJRFJNX0ZPUk1B VF9BQkdSODg4OCwKPiAgIAlEUk1fRk9STUFUX1JHQjg4OCwKPiArCURSTV9GT1JNQVRfQkdSODg4 LAo+ICAgCURSTV9GT1JNQVRfUkdCNTY1LAo+ICsJRFJNX0ZPUk1BVF9CR1I1NjUsCj4gICAJRFJN X0ZPUk1BVF9OVjEyLAo+ICAgCURSTV9GT1JNQVRfTlYxNiwKPiAgIAlEUk1fRk9STUFUX05WMjQs Cj4gQEAgLTIwOCw4ICsyMTMsMTIgQEAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGZvcm1hdHNfMDFb XSA9IHsKPiAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBmb3JtYXRzXzIzNFtdID0gewo+ICAgCURS TV9GT1JNQVRfWFJHQjg4ODgsCj4gICAJRFJNX0ZPUk1BVF9BUkdCODg4OCwKPiArCURSTV9GT1JN QVRfWEJHUjg4ODgsCj4gKwlEUk1fRk9STUFUX0FCR1I4ODg4LAo+ICAgCURSTV9GT1JNQVRfUkdC ODg4LAo+ICsJRFJNX0ZPUk1BVF9CR1I4ODgsCj4gICAJRFJNX0ZPUk1BVF9SR0I1NjUsCj4gKwlE Uk1fRk9STUFUX0JHUjU2NSwKPiAgIH07Cj4gICAKPiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm9w X3dpbl9waHkgd2luMDFfZGF0YSA9IHsKPiBAQCAtMjE3LDYgKzIyNiw3IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3Qgdm9wX3dpbl9waHkgd2luMDFfZGF0YSA9IHsKPiAgIAkubmZvcm1hdHMgPSBBUlJB WV9TSVpFKGZvcm1hdHNfMDEpLAo+ICAgCS5lbmFibGUgPSBWT1BfUkVHKFdJTjBfQ1RSTDAsIDB4 MSwgMCksCj4gICAJLmZvcm1hdCA9IFZPUF9SRUcoV0lOMF9DVFJMMCwgMHg3LCAxKSwKPiArCS5y Yl9zd2FwID0gVk9QX1JFRyhXSU4wX0NUUkwwLCAweDEsIDEyKSwKPiAgIAkuYWN0X2luZm8gPSBW T1BfUkVHKFdJTjBfQUNUX0lORk8sIDB4MWZmZjFmZmYsIDApLAo+ICAgCS5kc3BfaW5mbyA9IFZP UF9SRUcoV0lOMF9EU1BfSU5GTywgMHgwZmZmMGZmZiwgMCksCj4gICAJLmRzcF9zdCA9IFZPUF9S RUcoV0lOMF9EU1BfU1QsIDB4MWZmZjFmZmYsIDApLAo+IEBAIC0yMzMsNiArMjQzLDcgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCB2b3Bfd2luX3BoeSB3aW4yM19kYXRhID0gewo+ICAgCS5uZm9ybWF0 cyA9IEFSUkFZX1NJWkUoZm9ybWF0c18yMzQpLAo+ICAgCS5lbmFibGUgPSBWT1BfUkVHKFdJTjJf Q1RSTDAsIDB4MSwgMCksCj4gICAJLmZvcm1hdCA9IFZPUF9SRUcoV0lOMl9DVFJMMCwgMHg3LCAx KSwKPiArCS5yYl9zd2FwID0gVk9QX1JFRyhXSU4wX0NUUkwwLCAweDEsIDEyKSwKU2hvdWxkIGJl OgoKCS5yYl9zd2FwID0gVk9QX1JFRyhWT1BfV0lOMl9DVFJMMCwgMHgxLCAxMiksCgo+ICAgCS5k c3BfaW5mbyA9IFZPUF9SRUcoV0lOMl9EU1BfSU5GTzAsIDB4MGZmZjBmZmYsIDApLAo+ICAgCS5k c3Bfc3QgPSBWT1BfUkVHKFdJTjJfRFNQX1NUMCwgMHgxZmZmMWZmZiwgMCksCj4gICAJLnlyZ2Jf bXN0ID0gVk9QX1JFRyhXSU4yX01TVDAsIDB4ZmZmZmZmZmYsIDApLAo+IEBAIC0yNDYsNiArMjU3 LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2b3Bfd2luX3BoeSBjdXJzb3JfZGF0YSA9IHsKPiAg IAkubmZvcm1hdHMgPSBBUlJBWV9TSVpFKGZvcm1hdHNfMjM0KSwKPiAgIAkuZW5hYmxlID0gVk9Q X1JFRyhIV0NfQ1RSTDAsIDB4MSwgMCksCj4gICAJLmZvcm1hdCA9IFZPUF9SRUcoSFdDX0NUUkww LCAweDcsIDEpLAo+ICsJLnJiX3N3YXAgPSBWT1BfUkVHKFdJTjBfQ1RSTDAsIDB4MSwgMTIpLApj dXJzb3Igd2luIG5vdCBzdXBwb3J0IHJiX3N3YXAsIHJlbW92ZSBpdC4KPiAgIAkuZHNwX3N0ID0g Vk9QX1JFRyhIV0NfRFNQX1NULCAweDFmZmYxZmZmLCAwKSwKPiAgIAkueXJnYl9tc3QgPSBWT1Bf UkVHKEhXQ19NU1QsIDB4ZmZmZmZmZmYsIDApLAo+ICAgfTsKPiBAQCAtMzUxLDE1ICszNjMsMzIg QEAgc3RhdGljIGlubGluZSB2b2lkIHZvcF9tYXNrX3dyaXRlX3JlbGF4ZWQoc3RydWN0IHZvcCAq dm9wLCB1aW50MzJfdCBvZmZzZXQsCj4gICAJfQo+ICAgfQo+ICAgCj4gK3N0YXRpYyBib29sIGhh c19yYl9zd2FwcGVkKHVpbnQzMl90IGZvcm1hdCkKPiArewo+ICsJc3dpdGNoIChmb3JtYXQpIHsK PiArCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4 ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1I4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfQkdSNTY1 Ogo+ICsJCXJldHVybiB0cnVlOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9 Cj4gK30KPiArCj4gICBzdGF0aWMgZW51bSB2b3BfZGF0YV9mb3JtYXQgdm9wX2NvbnZlcnRfZm9y bWF0KHVpbnQzMl90IGZvcm1hdCkKPiAgIHsKPiAgIAlzd2l0Y2ggKGZvcm1hdCkgewo+ICAgCWNh c2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiAgIAljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Cj4g KwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6 Cj4gICAJCXJldHVybiBWT1BfRk1UX0FSR0I4ODg4Owo+ICAgCWNhc2UgRFJNX0ZPUk1BVF9SR0I4 ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfQkdSODg4Ogo+ICAgCQlyZXR1cm4gVk9QX0ZNVF9SR0I4 ODg7Cj4gICAJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1I1 NjU6Cj4gICAJCXJldHVybiBWT1BfRk1UX1JHQjU2NTsKPiAgIAljYXNlIERSTV9GT1JNQVRfTlYx MjoKPiAgIAkJcmV0dXJuIFZPUF9GTVRfWVVWNDIwU1A7Cj4gQEAgLTM3Nyw2ICs0MDYsNyBAQCBz dGF0aWMgYm9vbCBpc19hbHBoYV9zdXBwb3J0KHVpbnQzMl90IGZvcm1hdCkKPiAgIHsKPiAgIAlz d2l0Y2ggKGZvcm1hdCkgewo+ICAgCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKPiArCWNhc2Ug RFJNX0ZPUk1BVF9BQkdSODg4ODoKPiAgIAkJcmV0dXJuIHRydWU7Cj4gICAJZGVmYXVsdDoKPiAg IAkJcmV0dXJuIGZhbHNlOwo+IEBAIC01ODcsNiArNjE3LDcgQEAgc3RhdGljIGludCB2b3BfdXBk YXRlX3BsYW5lX2V2ZW50KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCWVudW0gdm9wX2Rh dGFfZm9ybWF0IGZvcm1hdDsKPiAgIAl1aW50MzJfdCB2YWw7Cj4gICAJYm9vbCBpc19hbHBoYTsK PiArCWJvb2wgcmJfc3dhcDsKPiAgIAlib29sIHZpc2libGU7Cj4gICAJaW50IHJldDsKPiAgIAlz dHJ1Y3QgZHJtX3JlY3QgZGVzdCA9IHsKPiBAQCAtNjIwLDYgKzY1MSw3IEBAIHN0YXRpYyBpbnQg dm9wX3VwZGF0ZV9wbGFuZV9ldmVudChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgIAkJcmV0 dXJuIDA7Cj4gICAKPiAgIAlpc19hbHBoYSA9IGlzX2FscGhhX3N1cHBvcnQoZmItPnBpeGVsX2Zv cm1hdCk7Cj4gKwlyYl9zd2FwID0gaGFzX3JiX3N3YXBwZWQoZmItPnBpeGVsX2Zvcm1hdCk7Cj4g ICAJZm9ybWF0ID0gdm9wX2NvbnZlcnRfZm9ybWF0KGZiLT5waXhlbF9mb3JtYXQpOwo+ICAgCWlm IChmb3JtYXQgPCAwKQo+ICAgCQlyZXR1cm4gZm9ybWF0Owo+IEBAIC02ODgsNiArNzIwLDcgQEAg c3RhdGljIGludCB2b3BfdXBkYXRlX3BsYW5lX2V2ZW50KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAo+ICAgCXZhbCA9IChkc3Bfc3R5IC0gMSkgPDwgMTY7Cj4gICAJdmFsIHw9IChkc3Bfc3R4IC0g MSkgJiAweGZmZmY7Cj4gICAJVk9QX1dJTl9TRVQodm9wLCB3aW4sIGRzcF9zdCwgdmFsKTsKPiAr CVZPUF9XSU5fU0VUKHZvcCwgd2luLCByYl9zd2FwLCByYl9zd2FwKTsKPiAgIAo+ICAgCWlmIChp c19hbHBoYSkgewo+ICAgCQlWT1BfV0lOX1NFVCh2b3AsIHdpbiwgZHN0X2FscGhhX2N0bCwKCgot LSAK77ytYXJrIFlhbwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: mark.yao@rock-chips.com (Mark yao) Date: Fri, 08 May 2015 16:40:10 +0800 Subject: [PATCH] drm/rockchip: Add BGR formats to VOP In-Reply-To: <1431072968-12696-1-git-send-email-tfiga@chromium.org> References: <1431072968-12696-1-git-send-email-tfiga@chromium.org> Message-ID: <554C766A.8070103@rock-chips.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Tomasz Thanks for the fix, but some register is wrong. On 2015?05?08? 16:16, Tomasz Figa wrote: > VOP can support BGR formats in all windows thanks to red/blue swap option > provided in WINx_CTRL0 registers. This patch enables support for > ABGR8888, XBGR8888, BGR888 and BGR565 formats by using this feature. > > Signed-off-by: Tomasz Figa > --- > drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 33 +++++++++++++++++++++++++++++ > 1 file changed, 33 insertions(+) > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > index 4557f33..45fa11c 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > @@ -169,6 +169,7 @@ struct vop_win_phy { > > struct vop_reg enable; > struct vop_reg format; > + struct vop_reg rb_swap; > struct vop_reg act_info; > struct vop_reg dsp_info; > struct vop_reg dsp_st; > @@ -198,8 +199,12 @@ struct vop_data { > static const uint32_t formats_01[] = { > DRM_FORMAT_XRGB8888, > DRM_FORMAT_ARGB8888, > + DRM_FORMAT_XBGR8888, > + DRM_FORMAT_ABGR8888, > DRM_FORMAT_RGB888, > + DRM_FORMAT_BGR888, > DRM_FORMAT_RGB565, > + DRM_FORMAT_BGR565, > DRM_FORMAT_NV12, > DRM_FORMAT_NV16, > DRM_FORMAT_NV24, > @@ -208,8 +213,12 @@ static const uint32_t formats_01[] = { > static const uint32_t formats_234[] = { > DRM_FORMAT_XRGB8888, > DRM_FORMAT_ARGB8888, > + DRM_FORMAT_XBGR8888, > + DRM_FORMAT_ABGR8888, > DRM_FORMAT_RGB888, > + DRM_FORMAT_BGR888, > DRM_FORMAT_RGB565, > + DRM_FORMAT_BGR565, > }; > > static const struct vop_win_phy win01_data = { > @@ -217,6 +226,7 @@ static const struct vop_win_phy win01_data = { > .nformats = ARRAY_SIZE(formats_01), > .enable = VOP_REG(WIN0_CTRL0, 0x1, 0), > .format = VOP_REG(WIN0_CTRL0, 0x7, 1), > + .rb_swap = VOP_REG(WIN0_CTRL0, 0x1, 12), > .act_info = VOP_REG(WIN0_ACT_INFO, 0x1fff1fff, 0), > .dsp_info = VOP_REG(WIN0_DSP_INFO, 0x0fff0fff, 0), > .dsp_st = VOP_REG(WIN0_DSP_ST, 0x1fff1fff, 0), > @@ -233,6 +243,7 @@ static const struct vop_win_phy win23_data = { > .nformats = ARRAY_SIZE(formats_234), > .enable = VOP_REG(WIN2_CTRL0, 0x1, 0), > .format = VOP_REG(WIN2_CTRL0, 0x7, 1), > + .rb_swap = VOP_REG(WIN0_CTRL0, 0x1, 12), Should be: .rb_swap = VOP_REG(VOP_WIN2_CTRL0, 0x1, 12), > .dsp_info = VOP_REG(WIN2_DSP_INFO0, 0x0fff0fff, 0), > .dsp_st = VOP_REG(WIN2_DSP_ST0, 0x1fff1fff, 0), > .yrgb_mst = VOP_REG(WIN2_MST0, 0xffffffff, 0), > @@ -246,6 +257,7 @@ static const struct vop_win_phy cursor_data = { > .nformats = ARRAY_SIZE(formats_234), > .enable = VOP_REG(HWC_CTRL0, 0x1, 0), > .format = VOP_REG(HWC_CTRL0, 0x7, 1), > + .rb_swap = VOP_REG(WIN0_CTRL0, 0x1, 12), cursor win not support rb_swap, remove it. > .dsp_st = VOP_REG(HWC_DSP_ST, 0x1fff1fff, 0), > .yrgb_mst = VOP_REG(HWC_MST, 0xffffffff, 0), > }; > @@ -351,15 +363,32 @@ static inline void vop_mask_write_relaxed(struct vop *vop, uint32_t offset, > } > } > > +static bool has_rb_swapped(uint32_t format) > +{ > + switch (format) { > + case DRM_FORMAT_XBGR8888: > + case DRM_FORMAT_ABGR8888: > + case DRM_FORMAT_BGR888: > + case DRM_FORMAT_BGR565: > + return true; > + default: > + return false; > + } > +} > + > static enum vop_data_format vop_convert_format(uint32_t format) > { > switch (format) { > case DRM_FORMAT_XRGB8888: > case DRM_FORMAT_ARGB8888: > + case DRM_FORMAT_XBGR8888: > + case DRM_FORMAT_ABGR8888: > return VOP_FMT_ARGB8888; > case DRM_FORMAT_RGB888: > + case DRM_FORMAT_BGR888: > return VOP_FMT_RGB888; > case DRM_FORMAT_RGB565: > + case DRM_FORMAT_BGR565: > return VOP_FMT_RGB565; > case DRM_FORMAT_NV12: > return VOP_FMT_YUV420SP; > @@ -377,6 +406,7 @@ static bool is_alpha_support(uint32_t format) > { > switch (format) { > case DRM_FORMAT_ARGB8888: > + case DRM_FORMAT_ABGR8888: > return true; > default: > return false; > @@ -587,6 +617,7 @@ static int vop_update_plane_event(struct drm_plane *plane, > enum vop_data_format format; > uint32_t val; > bool is_alpha; > + bool rb_swap; > bool visible; > int ret; > struct drm_rect dest = { > @@ -620,6 +651,7 @@ static int vop_update_plane_event(struct drm_plane *plane, > return 0; > > is_alpha = is_alpha_support(fb->pixel_format); > + rb_swap = has_rb_swapped(fb->pixel_format); > format = vop_convert_format(fb->pixel_format); > if (format < 0) > return format; > @@ -688,6 +720,7 @@ static int vop_update_plane_event(struct drm_plane *plane, > val = (dsp_sty - 1) << 16; > val |= (dsp_stx - 1) & 0xffff; > VOP_WIN_SET(vop, win, dsp_st, val); > + VOP_WIN_SET(vop, win, rb_swap, rb_swap); > > if (is_alpha) { > VOP_WIN_SET(vop, win, dst_alpha_ctl, -- ?ark Yao From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752672AbbEHIke (ORCPT ); Fri, 8 May 2015 04:40:34 -0400 Received: from regular2.263xmail.com ([211.157.152.3]:42685 "EHLO regular2.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752461AbbEHIka (ORCPT ); Fri, 8 May 2015 04:40:30 -0400 X-263anti-spam: KSV:0;BIG:0;ABS:1;DNS:0;ATT:0;SPF:S; X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-KSVirus-check: 0 X-ABS-CHECKED: 1 X-SKE-CHECKED: 1 X-ADDR-CHECKED: 0 X-RL-SENDER: mark.yao@rock-chips.com X-FST-TO: tfiga@chromium.org X-SENDER-IP: 58.22.7.114 X-LOGIN-NAME: mark.yao@rock-chips.com X-UNIQUE-TAG: <72f999a3c40e73c656e163774e0d4363> X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 Message-ID: <554C766A.8070103@rock-chips.com> Date: Fri, 08 May 2015 16:40:10 +0800 From: Mark yao User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: Tomasz Figa , dri-devel@lists.freedesktop.org CC: linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, Daniel Kurtz , Heiko Stuebner , David Airlie Subject: Re: [PATCH] drm/rockchip: Add BGR formats to VOP References: <1431072968-12696-1-git-send-email-tfiga@chromium.org> In-Reply-To: <1431072968-12696-1-git-send-email-tfiga@chromium.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Tomasz Thanks for the fix, but some register is wrong. On 2015年05月08日 16:16, Tomasz Figa wrote: > VOP can support BGR formats in all windows thanks to red/blue swap option > provided in WINx_CTRL0 registers. This patch enables support for > ABGR8888, XBGR8888, BGR888 and BGR565 formats by using this feature. > > Signed-off-by: Tomasz Figa > --- > drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 33 +++++++++++++++++++++++++++++ > 1 file changed, 33 insertions(+) > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > index 4557f33..45fa11c 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > @@ -169,6 +169,7 @@ struct vop_win_phy { > > struct vop_reg enable; > struct vop_reg format; > + struct vop_reg rb_swap; > struct vop_reg act_info; > struct vop_reg dsp_info; > struct vop_reg dsp_st; > @@ -198,8 +199,12 @@ struct vop_data { > static const uint32_t formats_01[] = { > DRM_FORMAT_XRGB8888, > DRM_FORMAT_ARGB8888, > + DRM_FORMAT_XBGR8888, > + DRM_FORMAT_ABGR8888, > DRM_FORMAT_RGB888, > + DRM_FORMAT_BGR888, > DRM_FORMAT_RGB565, > + DRM_FORMAT_BGR565, > DRM_FORMAT_NV12, > DRM_FORMAT_NV16, > DRM_FORMAT_NV24, > @@ -208,8 +213,12 @@ static const uint32_t formats_01[] = { > static const uint32_t formats_234[] = { > DRM_FORMAT_XRGB8888, > DRM_FORMAT_ARGB8888, > + DRM_FORMAT_XBGR8888, > + DRM_FORMAT_ABGR8888, > DRM_FORMAT_RGB888, > + DRM_FORMAT_BGR888, > DRM_FORMAT_RGB565, > + DRM_FORMAT_BGR565, > }; > > static const struct vop_win_phy win01_data = { > @@ -217,6 +226,7 @@ static const struct vop_win_phy win01_data = { > .nformats = ARRAY_SIZE(formats_01), > .enable = VOP_REG(WIN0_CTRL0, 0x1, 0), > .format = VOP_REG(WIN0_CTRL0, 0x7, 1), > + .rb_swap = VOP_REG(WIN0_CTRL0, 0x1, 12), > .act_info = VOP_REG(WIN0_ACT_INFO, 0x1fff1fff, 0), > .dsp_info = VOP_REG(WIN0_DSP_INFO, 0x0fff0fff, 0), > .dsp_st = VOP_REG(WIN0_DSP_ST, 0x1fff1fff, 0), > @@ -233,6 +243,7 @@ static const struct vop_win_phy win23_data = { > .nformats = ARRAY_SIZE(formats_234), > .enable = VOP_REG(WIN2_CTRL0, 0x1, 0), > .format = VOP_REG(WIN2_CTRL0, 0x7, 1), > + .rb_swap = VOP_REG(WIN0_CTRL0, 0x1, 12), Should be: .rb_swap = VOP_REG(VOP_WIN2_CTRL0, 0x1, 12), > .dsp_info = VOP_REG(WIN2_DSP_INFO0, 0x0fff0fff, 0), > .dsp_st = VOP_REG(WIN2_DSP_ST0, 0x1fff1fff, 0), > .yrgb_mst = VOP_REG(WIN2_MST0, 0xffffffff, 0), > @@ -246,6 +257,7 @@ static const struct vop_win_phy cursor_data = { > .nformats = ARRAY_SIZE(formats_234), > .enable = VOP_REG(HWC_CTRL0, 0x1, 0), > .format = VOP_REG(HWC_CTRL0, 0x7, 1), > + .rb_swap = VOP_REG(WIN0_CTRL0, 0x1, 12), cursor win not support rb_swap, remove it. > .dsp_st = VOP_REG(HWC_DSP_ST, 0x1fff1fff, 0), > .yrgb_mst = VOP_REG(HWC_MST, 0xffffffff, 0), > }; > @@ -351,15 +363,32 @@ static inline void vop_mask_write_relaxed(struct vop *vop, uint32_t offset, > } > } > > +static bool has_rb_swapped(uint32_t format) > +{ > + switch (format) { > + case DRM_FORMAT_XBGR8888: > + case DRM_FORMAT_ABGR8888: > + case DRM_FORMAT_BGR888: > + case DRM_FORMAT_BGR565: > + return true; > + default: > + return false; > + } > +} > + > static enum vop_data_format vop_convert_format(uint32_t format) > { > switch (format) { > case DRM_FORMAT_XRGB8888: > case DRM_FORMAT_ARGB8888: > + case DRM_FORMAT_XBGR8888: > + case DRM_FORMAT_ABGR8888: > return VOP_FMT_ARGB8888; > case DRM_FORMAT_RGB888: > + case DRM_FORMAT_BGR888: > return VOP_FMT_RGB888; > case DRM_FORMAT_RGB565: > + case DRM_FORMAT_BGR565: > return VOP_FMT_RGB565; > case DRM_FORMAT_NV12: > return VOP_FMT_YUV420SP; > @@ -377,6 +406,7 @@ static bool is_alpha_support(uint32_t format) > { > switch (format) { > case DRM_FORMAT_ARGB8888: > + case DRM_FORMAT_ABGR8888: > return true; > default: > return false; > @@ -587,6 +617,7 @@ static int vop_update_plane_event(struct drm_plane *plane, > enum vop_data_format format; > uint32_t val; > bool is_alpha; > + bool rb_swap; > bool visible; > int ret; > struct drm_rect dest = { > @@ -620,6 +651,7 @@ static int vop_update_plane_event(struct drm_plane *plane, > return 0; > > is_alpha = is_alpha_support(fb->pixel_format); > + rb_swap = has_rb_swapped(fb->pixel_format); > format = vop_convert_format(fb->pixel_format); > if (format < 0) > return format; > @@ -688,6 +720,7 @@ static int vop_update_plane_event(struct drm_plane *plane, > val = (dsp_sty - 1) << 16; > val |= (dsp_stx - 1) & 0xffff; > VOP_WIN_SET(vop, win, dsp_st, val); > + VOP_WIN_SET(vop, win, rb_swap, rb_swap); > > if (is_alpha) { > VOP_WIN_SET(vop, win, dst_alpha_ctl, -- Mark Yao