Difference between revisions of "CI20 upstream"

From eLinux.org
Jump to: navigation, search
(List of other possible issues when moving from 3.0.8 to 3.16+)
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
{{TOC right}}
 
{{TOC right}}
This page contains details about the latest kernel branch and any known quirks/special requirements.
+
This page contains details about the latest kernel branch running on the CI20.
  
 
It will be periodically updated to keep up to speed with the latest.
 
It will be periodically updated to keep up to speed with the latest.
  
The current branch tracking mainline 3.16
+
The current branch tracking mainline 3.18.3
  
 
  https://github.com/MIPS/CI20_linux
 
  https://github.com/MIPS/CI20_linux
  
 
== Status of Linux Kernel Drivers ==
 
== Status of Linux Kernel Drivers ==
 +
 +
=== Overview ===
 +
 +
The CI20 uses the Ingenic JZ4780 SoC.
 +
 +
Ingenic provided a 3.0.8 kernel with reasonably functioning support for most peripherals on the JZ4780.
 +
 +
Kernel.org development moves very quickly.
 +
 +
IMGTEC has reworked many drivers and forward ported others.
 +
 +
kernel.org already has support for JZ4740. However, JZ4740 has not been updated to use device-tree. JZ4780 and JZ4740 do share many features and peripherals. Hence, the best practice would be to augment the jz4740 drivers to work with the JZ4780.
 +
 +
3.16 branch was created to run the CI20 on a more recent kernel with that in mind. There was some work done on cosolidation to use the existing jz4740 drivers. But the core SoC parts were still disjoint.
 +
 +
After collaboration with the kernel community working on jz4740, jz4770, jz4780. 3.18 was rewritten with heavy emphasis on consolidation of the core SoC driver.
 +
 +
Core patches are in-flight.
 +
 +
There is still lots of work to be done. Please do contribute to kernel development. We are very welcoming and friendly on #ci20 chatroom and the [https://groups.google.com/forum/#!forum/mips-creator-ci20 mailing list]
  
 
=== Core ===
 
=== Core ===
Line 16: Line 36:
 
! State
 
! State
 
! Path
 
! Path
! Notes
+
! Notes 3.0.8
 +
! Notes 3.16
 +
! Notes 3.18 +
 
|-
 
|-
 
| Clocks
 
| Clocks
 
| Works
 
| Works
 
| drivers/clk/jz47xx
 
| drivers/clk/jz47xx
 +
|
 
| Could have common drivers/clk/ingenic for all SoCs with SoC specific binding using common components(?)
 
| Could have common drivers/clk/ingenic for all SoCs with SoC specific binding using common components(?)
 +
| Uses common clock framework with jz4740. Intended for upstream
 
|-
 
|-
 
| CPUfreq
 
| CPUfreq
 
|  
 
|  
 +
|
 
|
 
|
 
| 4770 has [https://github.com/gcwnow/linux/commit/58cf5778deb2b72e45cca6b670d8b25809ecdc82], but clock infrastructure is different. Ingenic kernel had [https://github.com/ZubairLK/CI20_linux/blob/75f15b9f845416b349268dc62d1274be11455c13/arch/mips/xburst/soc-4775/common/cpufreq.c] for 4780. Not ported to 3.16 yet.
 
| 4770 has [https://github.com/gcwnow/linux/commit/58cf5778deb2b72e45cca6b670d8b25809ecdc82], but clock infrastructure is different. Ingenic kernel had [https://github.com/ZubairLK/CI20_linux/blob/75f15b9f845416b349268dc62d1274be11455c13/arch/mips/xburst/soc-4775/common/cpufreq.c] for 4780. Not ported to 3.16 yet.
 +
|
 
|-
 
|-
 
| Device Tree
 
| Device Tree
 
| Mostly
 
| Mostly
 
|
 
|
 +
| N/A
 
| Parsed on boot, but compiled into the kernel. Would be good to allow it to be passed from the bootloader.
 
| Parsed on boot, but compiled into the kernel. Would be good to allow it to be passed from the bootloader.
 +
| DT for jz4740 as well
 
|-
 
|-
 
| DMA
 
| DMA
 
| Mostly
 
| Mostly
 
| drivers/dma/dma-jz4780.c
 
| drivers/dma/dma-jz4780.c
 +
|
 
| needs combining into dma-jz4740. Works, just missing priority support
 
| needs combining into dma-jz4740. Works, just missing priority support
 +
| still needs combining
 
|-
 
|-
 
| GPIO
 
| GPIO
 
| Works  
 
| Works  
 
| drivers/pinctrl/pinctrl-jz4780.c
 
| drivers/pinctrl/pinctrl-jz4780.c
 +
|
 
| should perhaps be in drivers/gpio/ (?)
 
| should perhaps be in drivers/gpio/ (?)
 +
|
 
|-
 
|-
 
| Hotplug
 
| Hotplug
 
|  
 
|  
 +
|
 +
|
 
|
 
|
 
|
 
|
Line 51: Line 85:
 
|
 
|
 
| drivers/irqchip/irq-jz4780.c
 
| drivers/irqchip/irq-jz4780.c
 +
|
 
| Very similar between SoCs (4740 has one bank, 60,70,80 has two banks)
 
| Very similar between SoCs (4740 has one bank, 60,70,80 has two banks)
 +
| Consolidated work in 3.18 headed upstream
 
|-
 
|-
 
| MXU Context
 
| MXU Context
 
|  
 
|  
 +
|
 +
|
 
|
 
|
 
|
 
|
Line 61: Line 99:
 
| Mostly
 
| Mostly
 
| drivers/pinctrl/pinctrl-jz4780.c
 
| drivers/pinctrl/pinctrl-jz4780.c
 +
| N/A
 
| Differs between SoCs. Functional, may need DT binding changes based on feedback from upstream. See also [https://github.com/gcwnow/linux/blob/jz-3.18/drivers/pinctrl/ingenic/pinctrl-jz4770.c pinctrl-jz4770.c].
 
| Differs between SoCs. Functional, may need DT binding changes based on feedback from upstream. See also [https://github.com/gcwnow/linux/blob/jz-3.18/drivers/pinctrl/ingenic/pinctrl-jz4770.c pinctrl-jz4770.c].
 +
|
 
|-
 
|-
 
| Power Controller (LPCR Register)
 
| Power Controller (LPCR Register)
 
|  
 
|  
 +
|
 +
|
 
|
 
|
 
|  
 
|  
Line 71: Line 113:
 
| Works
 
| Works
 
|  
 
|  
 +
|
 +
|
 
|
 
|
 
|-
 
|-
 
| RTC
 
| RTC
 
| Works
 
| Works
 +
| drivers/rtc/rtc-jz4740.c
 
|
 
|
|  
+
| Consolidated with jz4740
 +
| Consolidated with jz4740
 
|-
 
|-
 
| SMP
 
| SMP
 
| Works
 
| Works
 
|
 
|
 +
|
 +
| Works
 
|  
 
|  
 
|-
 
|-
Line 87: Line 135:
 
|
 
|
 
|  
 
|  
 +
|
 +
| Consolidated with jz4740
 
|}
 
|}
  
Line 95: Line 145:
 
! State
 
! State
 
! Path
 
! Path
! Notes
+
! Notes 3.0.8
 +
! Notes 3.16
 +
! Notes 3.18+
 
|-
 
|-
 
| ADC
 
| ADC
 
| WIP
 
| WIP
 +
|
 
|
 
|
 
| Check branches on https://github.com/ZubairLK/CI20_linux
 
| Check branches on https://github.com/ZubairLK/CI20_linux
 +
|
 
|-
 
|-
 
| Audio (ALSA)
 
| Audio (ALSA)
 
| WIP
 
| WIP
 +
|
 
|
 
|
 
| Check patches on https://groups.google.com/forum/#!forum/mips-creator-ci20-dev
 
| Check patches on https://groups.google.com/forum/#!forum/mips-creator-ci20-dev
 +
| Works. Uses jz4740 drivers with patches.
 
|-
 
|-
 
| Camera
 
| Camera
Line 111: Line 167:
 
|
 
|
 
|  
 
|  
 +
|
 +
|
 
|-
 
|-
 
| Ethernet
 
| Ethernet
 
| Works
 
| Works
 
| drivers/net/ethernet/davicom/dm9000.c
 
| drivers/net/ethernet/davicom/dm9000.c
 +
|
 
| Requires regulator and reset GPIO support, see [https://github.com/ZubairLK/CI20_linux/commit/e2299336b2922cbbaf1036869690b6fdf953c435].
 
| Requires regulator and reset GPIO support, see [https://github.com/ZubairLK/CI20_linux/commit/e2299336b2922cbbaf1036869690b6fdf953c435].
 +
| Patch upstreamed.
 
|-
 
|-
 
| GPU
 
| GPU
|  
+
| External Kernel Module
 
|
 
|
 +
| Works
 
|
 
|
 +
| WIP. Requires major overhaul as kernel layer changed significantly from 3.0.8 to 3.18 for jz4780. The way clocks, regulators enabled. The way registers handled etc.. LCD and HDMI drivers changed completely.
 
|-
 
|-
 
| HDMI
 
| HDMI
 
| WIP
 
| WIP
 
|
 
|
 +
| Resolution requires kernel recompile
 
| Check patches on https://groups.google.com/forum/#!forum/mips-creator-ci20-dev
 
| Check patches on https://groups.google.com/forum/#!forum/mips-creator-ci20-dev
 +
| Resolution requires xorg/bootargs. Needs work for consolidation with upstream.
 
|-
 
|-
 
| I2C
 
| I2C
 
| Works
 
| Works
 
| drivers/i2c/busses/i2c-jz4780.c
 
| drivers/i2c/busses/i2c-jz4780.c
 +
|
 
| 4740 has HW issue so uses gpio i2c instead. 4770 had [https://github.com/gcwnow/linux/commit/ffca0556] but unused so removed (also gave false positives on i2cdetect).
 
| 4740 has HW issue so uses gpio i2c instead. 4770 had [https://github.com/gcwnow/linux/commit/ffca0556] but unused so removed (also gave false positives on i2cdetect).
 +
| Works
 
|-
 
|-
 
| IPU
 
| IPU
 
|  
 
|  
 +
|
 
|
 
|
 
| 4770 has driver integrated with fbdev driver, see [https://github.com/gcwnow/linux/blob/jz-3.18/drivers/video/fbdev/jz4770_fb.c]. Plans to move to DRM+KVM but may take time.
 
| 4770 has driver integrated with fbdev driver, see [https://github.com/gcwnow/linux/blob/jz-3.18/drivers/video/fbdev/jz4770_fb.c]. Plans to move to DRM+KVM but may take time.
 +
|
 
|-
 
|-
 
| IR
 
| IR
Line 141: Line 209:
 
| drivers/media/rc/gpio-ir-recv.c
 
| drivers/media/rc/gpio-ir-recv.c
 
| GPIO, so use upstream GPIO driver
 
| GPIO, so use upstream GPIO driver
 +
|
 +
|
 
|-
 
|-
 
| MMC
 
| MMC
 
| Works
 
| Works
 
| drivers/mmc/host/jz4740_mmc.c
 
| drivers/mmc/host/jz4740_mmc.c
 +
|
 
| Various changes needed, see [https://github.com/ZubairLK/CI20_linux/commits/wip-ci20-v3.16-merge/drivers/mmc/host/jz47xx_mmc.c]. Should not rename driver. Check whether affected by [https://github.com/gcwnow/linux/commit/69106c17a401ed897a71b1cd6f5d60d7ea3a6c13].
 
| Various changes needed, see [https://github.com/ZubairLK/CI20_linux/commits/wip-ci20-v3.16-merge/drivers/mmc/host/jz47xx_mmc.c]. Should not rename driver. Check whether affected by [https://github.com/gcwnow/linux/commit/69106c17a401ed897a71b1cd6f5d60d7ea3a6c13].
 +
| Works. Consolidation work needed before upstream. jz4740 has diverged. DMA driver differences block.
 
|-
 
|-
 
| NAND
 
| NAND
Line 151: Line 223:
 
|
 
|
 
|  
 
|  
 +
| Works. Reworked driver
 +
| Works. Reworked driver
 
|-
 
|-
 
| PWM
 
| PWM
 
|
 
|
 
| drivers/pwm/pwm-jz4740.c
 
| drivers/pwm/pwm-jz4740.c
 +
|
 
| 4770 uses same driver as 4740. Maybe applicable to 4780 too. See [https://github.com/gcwnow/linux/commits/jz-3.18/drivers/pwm/pwm-jz4740.c].
 
| 4770 uses same driver as 4740. Maybe applicable to 4780 too. See [https://github.com/gcwnow/linux/commits/jz-3.18/drivers/pwm/pwm-jz4740.c].
 +
|
 
|-
 
|-
 
| Regulator
 
| Regulator
 
| Works
 
| Works
 
|
 
|
|  
+
|
 +
| Works. Based on i2c driver.
 +
| Works. Based on i2c driver.
 
|-
 
|-
 
| SPI (SSI)
 
| SPI (SSI)
 
| None
 
| None
 +
|
 
|
 
|
 
| SPIO GPIO should work, but a dedicated driver for the SSI hardware in drivers/spi/ would be better.
 
| SPIO GPIO should work, but a dedicated driver for the SSI hardware in drivers/spi/ would be better.
 +
|
 
|-
 
|-
 
| UART
 
| UART
 
| Works
 
| Works
 +
|
 
|
 
|
 
| Quirks: see patches [https://github.com/ZubairLK/CI20_linux/commit/1d1d702613e0f4241ab7d8021b937e6366117c79] [https://github.com/MIPS/CI20_linux/commit/3939d3a65122eb40beec6aed1484c04ffc20cc27] need moving to wrapper driver, like 8250_dw and [https://lkml.org/lkml/2014/8/12/266 mediatek] which can be common between Ingenic SoCs.
 
| Quirks: see patches [https://github.com/ZubairLK/CI20_linux/commit/1d1d702613e0f4241ab7d8021b937e6366117c79] [https://github.com/MIPS/CI20_linux/commit/3939d3a65122eb40beec6aed1484c04ffc20cc27] need moving to wrapper driver, like 8250_dw and [https://lkml.org/lkml/2014/8/12/266 mediatek] which can be common between Ingenic SoCs.
 +
| Works
 
|-
 
|-
 
| USB (EHCI)
 
| USB (EHCI)
Line 176: Line 258:
 
|
 
|
 
|  
 
|  
 +
|
 +
| Buggy.
 
|-
 
|-
 
| USB (OHCI)
 
| USB (OHCI)
Line 181: Line 265:
 
|
 
|
 
|  
 
|  
 +
|
 +
| Buggy.
 
|-
 
|-
| USB(OTG)
+
| USB(DWC)
 
| Works
 
| Works
 +
|
 
|
 
|
 
| Upstream driver supports only host mode as of 3.15
 
| Upstream driver supports only host mode as of 3.15
 +
| Uses upstream driver. Sometimes gives overcurrent errors on dmesg
 
|-
 
|-
 
| VPU
 
| VPU
 
|  
 
|  
 +
|
 
|
 
|
 
| Driver aimed at 4770, see [https://github.com/gcwnow/linux/blob/jz-3.18/drivers/misc/jz_vpu.c]. For samples see [https://github.com/laanwj/gcw0_vpu_poc]. May be insecure (allows userland to do its own cache control and access TCSM banks). RemoteProc driver in progress, see [https://github.com/gcwnow/linux/commit/ab21d08a852431b5e90cda9ffea5ff524374fd8e].
 
| Driver aimed at 4770, see [https://github.com/gcwnow/linux/blob/jz-3.18/drivers/misc/jz_vpu.c]. For samples see [https://github.com/laanwj/gcw0_vpu_poc]. May be insecure (allows userland to do its own cache control and access TCSM banks). RemoteProc driver in progress, see [https://github.com/gcwnow/linux/commit/ab21d08a852431b5e90cda9ffea5ff524374fd8e].
 +
|
 
|-
 
|-
 
| Wifi
 
| Wifi
 
| WIP
 
| WIP
 +
|
 
|
 
|
 
| Check patches on https://groups.google.com/forum/#!forum/mips-creator-ci20-dev
 
| Check patches on https://groups.google.com/forum/#!forum/mips-creator-ci20-dev
 +
| Works. Uses some hacks to keep regulators on to enable the chip. Uses upstreamed driver and mmc/dma.
 
|-
 
|-
 
| BT
 
| BT
 
| WIP
 
| WIP
 
|
 
|
| Check branches on https://github.com/ZubairLK/CI20_linux
+
|
 +
|
 +
| Almost works. Uses some hacks to keep regulators on to enable the chip. Scans ok. File transfer presents a few issues. Possible not entirely kernels fault and bluez etc.
 
|}
 
|}
  
== List of other possible issues ==
+
== List of other possible issues when moving from 3.0.8 to 3.16+ ==
  
 +
=== Bluetooth ===
 
* /etc/init.d/iw8103 is the startup script for the BT/Wifi firmware in the default rootfs.
 
* /etc/init.d/iw8103 is the startup script for the BT/Wifi firmware in the default rootfs.
  
If using 3.16, the script can cause the boot to hang. Please move the script out of /etc/init.d
+
If using 3.16/3.18, the script can cause the boot to hang unless the BT device is responding.  
 +
Please move the script out of /etc/init.d or make sure the kernel is correct.
 +
 
 +
This is an issue with broadcoms patchram utility. It keeps trying. (Perhaps its some arguments passed to the script?)
  
 
Add "root=/dev/mmcblk0p1 rootwait" to bootargs in uboot if you wish to boot a rootfs from mmc.
 
Add "root=/dev/mmcblk0p1 rootwait" to bootargs in uboot if you wish to boot a rootfs from mmc.
 +
 +
=== SGX ===
 +
 +
GPU drivers rely on userland binaries and kernel module sources.
 +
 +
The work is on-going at IMG. Until the drivers are updated, using the GPU (openGL etc) will not be possible.
 +
 +
For normal usage, Xorg and framebuffer drivers do work.
 +
 +
The default xorg.conf is configured to load the powervr module. move that somewhere else/keep a copy. And use this [https://github.com/ZubairLK/ci20_other_files/blob/master/xorg.conf.fbdev xorg.conf]
 +
 +
Note: Rename to xorg.conf. Don't leave it named xorg.conf.fbdev.
 +
 +
Place in /etc/X11/xorg.conf
  
 
{{CI20}}
 
{{CI20}}
 
[[Category:CI20|Upstream]]
 
[[Category:CI20|Upstream]]

Revision as of 05:17, 23 January 2015

This page contains details about the latest kernel branch running on the CI20.

It will be periodically updated to keep up to speed with the latest.

The current branch tracking mainline 3.18.3

https://github.com/MIPS/CI20_linux

Status of Linux Kernel Drivers

Overview

The CI20 uses the Ingenic JZ4780 SoC.

Ingenic provided a 3.0.8 kernel with reasonably functioning support for most peripherals on the JZ4780.

Kernel.org development moves very quickly.

IMGTEC has reworked many drivers and forward ported others.

kernel.org already has support for JZ4740. However, JZ4740 has not been updated to use device-tree. JZ4780 and JZ4740 do share many features and peripherals. Hence, the best practice would be to augment the jz4740 drivers to work with the JZ4780.

3.16 branch was created to run the CI20 on a more recent kernel with that in mind. There was some work done on cosolidation to use the existing jz4740 drivers. But the core SoC parts were still disjoint.

After collaboration with the kernel community working on jz4740, jz4770, jz4780. 3.18 was rewritten with heavy emphasis on consolidation of the core SoC driver.

Core patches are in-flight.

There is still lots of work to be done. Please do contribute to kernel development. We are very welcoming and friendly on #ci20 chatroom and the mailing list

Core

Name State Path Notes 3.0.8 Notes 3.16 Notes 3.18 +
Clocks Works drivers/clk/jz47xx Could have common drivers/clk/ingenic for all SoCs with SoC specific binding using common components(?) Uses common clock framework with jz4740. Intended for upstream
CPUfreq 4770 has [1], but clock infrastructure is different. Ingenic kernel had [2] for 4780. Not ported to 3.16 yet.
Device Tree Mostly N/A Parsed on boot, but compiled into the kernel. Would be good to allow it to be passed from the bootloader. DT for jz4740 as well
DMA Mostly drivers/dma/dma-jz4780.c needs combining into dma-jz4740. Works, just missing priority support still needs combining
GPIO Works drivers/pinctrl/pinctrl-jz4780.c should perhaps be in drivers/gpio/ (?)
Hotplug
IRQ Controller drivers/irqchip/irq-jz4780.c Very similar between SoCs (4740 has one bank, 60,70,80 has two banks) Consolidated work in 3.18 headed upstream
MXU Context
PinCtrl Mostly drivers/pinctrl/pinctrl-jz4780.c N/A Differs between SoCs. Functional, may need DT binding changes based on feedback from upstream. See also pinctrl-jz4770.c.
Power Controller (LPCR Register)
Power Off & Reset Works
RTC Works drivers/rtc/rtc-jz4740.c Consolidated with jz4740 Consolidated with jz4740
SMP Works Works
Watchdog Works Consolidated with jz4740

Peripheral drivers

Name State Path Notes 3.0.8 Notes 3.16 Notes 3.18+
ADC WIP Check branches on https://github.com/ZubairLK/CI20_linux
Audio (ALSA) WIP Check patches on https://groups.google.com/forum/#!forum/mips-creator-ci20-dev Works. Uses jz4740 drivers with patches.
Camera
Ethernet Works drivers/net/ethernet/davicom/dm9000.c Requires regulator and reset GPIO support, see [3]. Patch upstreamed.
GPU External Kernel Module Works WIP. Requires major overhaul as kernel layer changed significantly from 3.0.8 to 3.18 for jz4780. The way clocks, regulators enabled. The way registers handled etc.. LCD and HDMI drivers changed completely.
HDMI WIP Resolution requires kernel recompile Check patches on https://groups.google.com/forum/#!forum/mips-creator-ci20-dev Resolution requires xorg/bootargs. Needs work for consolidation with upstream.
I2C Works drivers/i2c/busses/i2c-jz4780.c 4740 has HW issue so uses gpio i2c instead. 4770 had [4] but unused so removed (also gave false positives on i2cdetect). Works
IPU 4770 has driver integrated with fbdev driver, see [5]. Plans to move to DRM+KVM but may take time.
IR Driver upstream drivers/media/rc/gpio-ir-recv.c GPIO, so use upstream GPIO driver
MMC Works drivers/mmc/host/jz4740_mmc.c Various changes needed, see [6]. Should not rename driver. Check whether affected by [7]. Works. Consolidation work needed before upstream. jz4740 has diverged. DMA driver differences block.
NAND Works Works. Reworked driver Works. Reworked driver
PWM drivers/pwm/pwm-jz4740.c 4770 uses same driver as 4740. Maybe applicable to 4780 too. See [8].
Regulator Works Works. Based on i2c driver. Works. Based on i2c driver.
SPI (SSI) None SPIO GPIO should work, but a dedicated driver for the SSI hardware in drivers/spi/ would be better.
UART Works Quirks: see patches [9] [10] need moving to wrapper driver, like 8250_dw and mediatek which can be common between Ingenic SoCs. Works
USB (EHCI) Works Buggy.
USB (OHCI) Works Buggy.
USB(DWC) Works Upstream driver supports only host mode as of 3.15 Uses upstream driver. Sometimes gives overcurrent errors on dmesg
VPU Driver aimed at 4770, see [11]. For samples see [12]. May be insecure (allows userland to do its own cache control and access TCSM banks). RemoteProc driver in progress, see [13].
Wifi WIP Check patches on https://groups.google.com/forum/#!forum/mips-creator-ci20-dev Works. Uses some hacks to keep regulators on to enable the chip. Uses upstreamed driver and mmc/dma.
BT WIP Almost works. Uses some hacks to keep regulators on to enable the chip. Scans ok. File transfer presents a few issues. Possible not entirely kernels fault and bluez etc.

List of other possible issues when moving from 3.0.8 to 3.16+

Bluetooth

  • /etc/init.d/iw8103 is the startup script for the BT/Wifi firmware in the default rootfs.

If using 3.16/3.18, the script can cause the boot to hang unless the BT device is responding. Please move the script out of /etc/init.d or make sure the kernel is correct.

This is an issue with broadcoms patchram utility. It keeps trying. (Perhaps its some arguments passed to the script?)

Add "root=/dev/mmcblk0p1 rootwait" to bootargs in uboot if you wish to boot a rootfs from mmc.

SGX

GPU drivers rely on userland binaries and kernel module sources.

The work is on-going at IMG. Until the drivers are updated, using the GPU (openGL etc) will not be possible.

For normal usage, Xorg and framebuffer drivers do work.

The default xorg.conf is configured to load the powervr module. move that somewhere else/keep a copy. And use this xorg.conf

Note: Rename to xorg.conf. Don't leave it named xorg.conf.fbdev.

Place in /etc/X11/xorg.conf