[PATCH] arm: mvebu: Use dw-apb-uart instead of ns16650 as UART driver

Gregory CLEMENT gregory.clement at free-electrons.com
Tue Dec 4 12:08:50 EST 2012


On 12/04/2012 06:04 PM, Gregory CLEMENT wrote:
> The UART controller used in the Armada 370 and Armada XP SoCs is the
> Synopsys DesignWare 8250 (aka Synopsys DesignWare ABP UART). The
> improper use of the ns16550 can lead to a kernel oops during boot if
> a character is sent to the UART before the initialization of the
> driver. The DW APB has an extra interrupt that gets raised when
> writing to the LCR when busy. This explains why we need to use
> dw-apb-uart driver to handle this.
> 
> Signed-off-by: Gregory CLEMENT <gregory.clement at free-electrons.com>
> ---
> 
> This patch fixed a bug introduced in 3.7, but as there are very few
> boards supported in 3.7 (only the Armada 370 and Armada XP evaluation
> boards), it is not a big deal if this patch is only applied for 3.8.
> 
> This patch is based on 3.7-rc8 and can be applied on top of the
> current arm-soc/for-next with a trivial conflict on mvebu_defconfig.
> 

Jason,

do you want a git pull, or is it easier to just pick this single patch?

Thanks,
Gregory

> ---
>  arch/arm/boot/dts/armada-370-xp.dtsi |    6 ++++--
>  arch/arm/boot/dts/armada-xp.dtsi     |    6 ++++--
>  arch/arm/configs/mvebu_defconfig     |    2 +-
>  3 files changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/arm/boot/dts/armada-370-xp.dtsi b/arch/arm/boot/dts/armada-370-xp.dtsi
> index 16cc82c..03640f7 100644
> --- a/arch/arm/boot/dts/armada-370-xp.dtsi
> +++ b/arch/arm/boot/dts/armada-370-xp.dtsi
> @@ -44,17 +44,19 @@
>  		ranges;
>  
>  		serial at d0012000 {
> -				compatible = "ns16550";
> +				compatible = "snps,dw-apb-uart";
>  				reg = <0xd0012000 0x100>;
>  				reg-shift = <2>;
>  				interrupts = <41>;
> +				reg-io-width = <4>;
>  				status = "disabled";
>  		};
>  		serial at d0012100 {
> -				compatible = "ns16550";
> +				compatible = "snps,dw-apb-uart";
>  				reg = <0xd0012100 0x100>;
>  				reg-shift = <2>;
>  				interrupts = <42>;
> +				reg-io-width = <4>;
>  				status = "disabled";
>  		};
>  
> diff --git a/arch/arm/boot/dts/armada-xp.dtsi b/arch/arm/boot/dts/armada-xp.dtsi
> index 71d6b5d..9a0e744 100644
> --- a/arch/arm/boot/dts/armada-xp.dtsi
> +++ b/arch/arm/boot/dts/armada-xp.dtsi
> @@ -29,17 +29,19 @@
>  
>  	soc {
>  		serial at d0012200 {
> -				compatible = "ns16550";
> +				compatible = "snps,dw-apb-uart";
>  				reg = <0xd0012200 0x100>;
>  				reg-shift = <2>;
>  				interrupts = <43>;
> +				reg-io-width = <4>;
>  				status = "disabled";
>  		};
>  		serial at d0012300 {
> -				compatible = "ns16550";
> +				compatible = "snps,dw-apb-uart";
>  				reg = <0xd0012300 0x100>;
>  				reg-shift = <2>;
>  				interrupts = <44>;
> +				reg-io-width = <4>;
>  				status = "disabled";
>  		};
>  
> diff --git a/arch/arm/configs/mvebu_defconfig b/arch/arm/configs/mvebu_defconfig
> index 3458752..9e34084 100644
> --- a/arch/arm/configs/mvebu_defconfig
> +++ b/arch/arm/configs/mvebu_defconfig
> @@ -22,7 +22,7 @@ CONFIG_VFP=y
>  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
>  CONFIG_SERIAL_8250=y
>  CONFIG_SERIAL_8250_CONSOLE=y
> -CONFIG_SERIAL_OF_PLATFORM=y
> +CONFIG_SERIAL_8250_DW=y
>  CONFIG_GPIOLIB=y
>  CONFIG_GPIO_SYSFS=y
>  # CONFIG_USB_SUPPORT is not set
> 




More information about the linux-arm-kernel mailing list