Module Name: src
Committed By: jmcneill
Date: Thu Dec 4 11:16:38 UTC 2014
Modified Files:
src/sys/arch/arm/allwinner: awin_debe.c awin_fb.c awin_intr.h awin_io.c
awin_var.h files.awin
Log Message:
Add awinmp(4) glue.
It won't compile (uses nonexistent ioctls) but adding this for posterity.
In my testing, 2D accel for solid fill and copy is considerably slower than
with software rendering, so no sense in turning this on.
To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/allwinner/awin_debe.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/allwinner/awin_fb.c
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/allwinner/awin_intr.h
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/arm/allwinner/awin_io.c
cvs rdiff -u -r1.26 -r1.27 src/sys/arch/arm/allwinner/awin_var.h \
src/sys/arch/arm/allwinner/files.awin
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/allwinner/awin_debe.c
diff -u src/sys/arch/arm/allwinner/awin_debe.c:1.10 src/sys/arch/arm/allwinner/awin_debe.c:1.11
--- src/sys/arch/arm/allwinner/awin_debe.c:1.10 Sun Nov 30 20:04:57 2014
+++ src/sys/arch/arm/allwinner/awin_debe.c Thu Dec 4 11:16:38 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: awin_debe.c,v 1.10 2014/11/30 20:04:57 jmcneill Exp $ */
+/* $NetBSD: awin_debe.c,v 1.11 2014/12/04 11:16:38 jmcneill Exp $ */
/*-
* Copyright (c) 2014 Jared D. McNeill <[email protected]>
@@ -28,6 +28,7 @@
#include "opt_allwinner.h"
#include "genfb.h"
+#include "awin_mp.h"
#ifndef AWIN_DEBE_VIDEOMEM
#define AWIN_DEBE_VIDEOMEM (16 * 1024 * 1024)
@@ -36,7 +37,7 @@
#define AWIN_DEBE_CURMAX 64
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: awin_debe.c,v 1.10 2014/11/30 20:04:57 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: awin_debe.c,v 1.11 2014/12/04 11:16:38 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -114,6 +115,9 @@ awin_debe_attach(device_t parent, device
struct awinio_attach_args * const aio = aux;
const struct awin_locators * const loc = &aio->aio_loc;
prop_dictionary_t cfg = device_properties(self);
+#if NAWIN_MP > 0
+ device_t mpdev;
+#endif
int error;
sc->sc_dev = self;
@@ -197,6 +201,16 @@ awin_debe_attach(device_t parent, device
"couldn't allocate video memory, error = %d\n", error);
return;
}
+
+#if NAWIN_MP > 0
+ mpdev = device_find_by_driver_unit("awinmp", 0);
+ if (mpdev) {
+ paddr_t pa = sc->sc_dmamap->dm_segs[0].ds_addr;
+ if (pa >= AWIN_SDRAM_PBASE)
+ pa -= AWIN_SDRAM_PBASE;
+ awin_mp_setbase(mpdev, pa, sc->sc_dmasize);
+ }
+#endif
}
static int
Index: src/sys/arch/arm/allwinner/awin_fb.c
diff -u src/sys/arch/arm/allwinner/awin_fb.c:1.8 src/sys/arch/arm/allwinner/awin_fb.c:1.9
--- src/sys/arch/arm/allwinner/awin_fb.c:1.8 Sun Nov 30 20:25:54 2014
+++ src/sys/arch/arm/allwinner/awin_fb.c Thu Dec 4 11:16:38 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: awin_fb.c,v 1.8 2014/11/30 20:25:54 jmcneill Exp $ */
+/* $NetBSD: awin_fb.c,v 1.9 2014/12/04 11:16:38 jmcneill Exp $ */
/*-
* Copyright (c) 2014 Jared D. McNeill <[email protected]>
@@ -26,8 +26,10 @@
* SUCH DAMAGE.
*/
+#include "awin_mp.h"
+
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: awin_fb.c,v 1.8 2014/11/30 20:25:54 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: awin_fb.c,v 1.9 2014/12/04 11:16:38 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -47,6 +49,7 @@ __KERNEL_RCSID(0, "$NetBSD: awin_fb.c,v
struct awin_fb_softc {
struct genfb_softc sc_gen;
device_t sc_debedev;
+ device_t sc_mpdev;
bus_dma_tag_t sc_dmat;
bus_dma_segment_t *sc_dmasegs;
@@ -87,6 +90,7 @@ awin_fb_attach(device_t parent, device_t
sc->sc_dmat = afb->afb_dmat;
sc->sc_dmasegs = afb->afb_dmasegs;
sc->sc_ndmasegs = afb->afb_ndmasegs;
+ sc->sc_mpdev = device_find_by_driver_unit("awinmp", 0);
prop_dictionary_set_uint32(cfg, "width", afb->afb_width);
prop_dictionary_set_uint32(cfg, "height", afb->afb_height);
@@ -146,6 +150,10 @@ awin_fb_ioctl(void *v, void *vs, u_long
if (error == 0) {
fbi->fbi_flags |= WSFB_VRAM_IS_RAM;
fbi->fbi_fbsize = sc->sc_dmasegs[0].ds_len;
+#if NAWIN_MP > 0
+ if (sc->sc_mpdev)
+ fbi->fbi_flags |= WSFB_ACCEL;
+#endif
}
return error;
case WSDISPLAYIO_SVIDEO:
@@ -155,6 +163,14 @@ awin_fb_ioctl(void *v, void *vs, u_long
case WSDISPLAYIO_GCURMAX:
case WSDISPLAYIO_SCURSOR:
return awin_debe_ioctl(sc->sc_debedev, cmd, data);
+#if NAWIN_MP > 0
+ case WSDISPLAYIO_FILL:
+ case WSDISPLAYIO_COPY:
+ case WSDISPLAYIO_SYNC:
+ if (sc->sc_mpdev == NULL)
+ return EPASSTHROUGH;
+ return awin_mp_ioctl(sc->sc_mpdev, cmd, data);
+#endif
default:
return EPASSTHROUGH;
}
Index: src/sys/arch/arm/allwinner/awin_intr.h
diff -u src/sys/arch/arm/allwinner/awin_intr.h:1.9 src/sys/arch/arm/allwinner/awin_intr.h:1.10
--- src/sys/arch/arm/allwinner/awin_intr.h:1.9 Sun Nov 2 23:55:06 2014
+++ src/sys/arch/arm/allwinner/awin_intr.h Thu Dec 4 11:16:38 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: awin_intr.h,v 1.9 2014/11/02 23:55:06 jmcneill Exp $ */
+/* $NetBSD: awin_intr.h,v 1.10 2014/12/04 11:16:38 jmcneill Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -161,6 +161,7 @@
#define AWIN_A31_IRQ_USB3 106
#define AWIN_A31_IRQ_USB4 108
#define AWIN_A31_IRQ_GMAC 114
+#define AWIN_A31_IRQ_MP 115
#define AWIN_A31_IRQ_HDMI 120
#endif /* _ARM_ALLWINNER_AWIN_INTR_H_ */
Index: src/sys/arch/arm/allwinner/awin_io.c
diff -u src/sys/arch/arm/allwinner/awin_io.c:1.28 src/sys/arch/arm/allwinner/awin_io.c:1.29
--- src/sys/arch/arm/allwinner/awin_io.c:1.28 Tue Nov 11 17:00:59 2014
+++ src/sys/arch/arm/allwinner/awin_io.c Thu Dec 4 11:16:38 2014
@@ -31,7 +31,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: awin_io.c,v 1.28 2014/11/11 17:00:59 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: awin_io.c,v 1.29 2014/12/04 11:16:38 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -108,6 +108,7 @@ static const struct awin_locators awin_l
{ "com", OFFANDSIZE(UART6), 6, AWIN_IRQ_UART6, A10|A20 },
{ "com", OFFANDSIZE(UART7), 7, AWIN_IRQ_UART7, A10|A20 },
{ "com", OFFANDSIZE(UART0), 0, AWIN_A31_IRQ_UART0, A31 },
+ { "awinmp", OFFANDSIZE(MP), NOPORT, AWIN_A31_IRQ_MP, A31 },
{ "awindebe", AWIN_DE_BE0_OFFSET, 0x1000, 0, NOINTR, AANY },
{ "awindebe", AWIN_DE_BE1_OFFSET, 0x1000, 1, NOINTR, AANY },
{ "awintcon", OFFANDSIZE(LCD0), 0, NOINTR, AANY },
Index: src/sys/arch/arm/allwinner/awin_var.h
diff -u src/sys/arch/arm/allwinner/awin_var.h:1.26 src/sys/arch/arm/allwinner/awin_var.h:1.27
--- src/sys/arch/arm/allwinner/awin_var.h:1.26 Sun Nov 23 23:04:58 2014
+++ src/sys/arch/arm/allwinner/awin_var.h Thu Dec 4 11:16:38 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: awin_var.h,v 1.26 2014/11/23 23:04:58 jmcneill Exp $ */
+/* $NetBSD: awin_var.h,v 1.27 2014/12/04 11:16:38 jmcneill Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -133,6 +133,8 @@ void awin_tcon_enable(bool);
void awin_debe_set_videomode(const struct videomode *);
void awin_debe_enable(bool);
int awin_debe_ioctl(device_t, u_long, void *);
+int awin_mp_ioctl(device_t, u_long, void *);
+void awin_mp_setbase(device_t, paddr_t, size_t);
struct awin_hdmi_info {
bool display_connected;
Index: src/sys/arch/arm/allwinner/files.awin
diff -u src/sys/arch/arm/allwinner/files.awin:1.26 src/sys/arch/arm/allwinner/files.awin:1.27
--- src/sys/arch/arm/allwinner/files.awin:1.26 Tue Nov 18 01:53:53 2014
+++ src/sys/arch/arm/allwinner/files.awin Thu Dec 4 11:16:38 2014
@@ -1,4 +1,4 @@
-# $NetBSD: files.awin,v 1.26 2014/11/18 01:53:53 jmcneill Exp $
+# $NetBSD: files.awin,v 1.27 2014/12/04 11:16:38 jmcneill Exp $
#
# Configuration info for Allwinner ARM Peripherals
#
@@ -158,6 +158,11 @@ device awindebe { }
attach awindebe at awinio with awin_debe
file arch/arm/allwinner/awin_debe.c awin_debe | awin_hdmi
+# A10/A20/A31 Mixer processor (MP)
+device awinmp
+attach awinmp at awinio with awin_mp
+file arch/arm/allwinner/awin_mp.c awin_mp needs-flag
+
# Framebuffer
attach genfb at awindebe with awin_fb: edid
file arch/arm/allwinner/awin_fb.c awin_fb needs-flag