Received: by 10.223.164.202 with SMTP id h10csp588755wrb; Thu, 30 Nov 2017 15:53:22 -0800 (PST) X-Google-Smtp-Source: AGs4zMYQiXprOF+DQOtPPobe+i0XvK7qRiWp/9MgdbFwWuTwXJrhSMrKVkJEw/6M8/knNgbf9gpi X-Received: by 10.84.212.144 with SMTP id e16mr4420949pli.239.1512086001925; Thu, 30 Nov 2017 15:53:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1512086001; cv=none; d=google.com; s=arc-20160816; b=GrrgAF1QpD6rFIa2YLvu5ulXA1vG5weOKX8ZMiGhEjvvrzodro/prVwYStNIrR4eDK lU06pyXq6n1gd0Ntbq+4Pv6wmHICBuAxaPDGwaEFTrIcuE9vxFc+L8PFtFUWGNYE2q8q eE9GcbgcCwvmk09wasmd6sxvHUBifpUfz17wnrQdD+3IScDGBZoV+sOBrOXuEI3bKdJA +737eLZcIgGLaKvC+6TU4c4HRvg3VN+UvQ22XeQ4jNOdQUBfDXzYEyTtSMn9PlEJvs9X UM0R2xlh5PzjiCUyJF+aYw8bk6tk+6dWmN6stNtBPGCuHuVKejpL0p+QX30o47xTHorH ljJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=dkr9VYnTVlAAiXJohZ/fTtWDY/JQyG3EeeCSNQ6EAiA=; b=lbVB/VkijqNmZatYMIW+6G60aX8zlxEjYDgGUky5x7WGnr6IN928FqFbOq50menG0s 18XZjZpDIpQdrBSGsqRxIx0SWpG98E9u4JYNajjbxzwwzQObEU2eTYoAAob/Djl14m/m 3SW0ThpY1Tc/i6b3nofVDEjRDgG0ZoC/Vq3I4jfYG3pfqF5sYghHyJOgZH2CyPMNye41 qaltgHreYJZeLpkiVEOBZCy0Aow+lfeXNiM41aHEpOMnnQgChoUzUYcU4CNvt4UpEq5o lD4pA3U17ZSIF+8k+2u5/w3UIsoVE3rsZXYDjTsJU+fnJYR217N0FebtRN6LU1wodF+v DNVQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k14si3754180pgp.518.2017.11.30.15.53.08; Thu, 30 Nov 2017 15:53:21 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752202AbdK3XwJ (ORCPT + 99 others); Thu, 30 Nov 2017 18:52:09 -0500 Received: from mail-out.m-online.net ([212.18.0.10]:45508 "EHLO mail-out.m-online.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752139AbdK3XwG (ORCPT ); Thu, 30 Nov 2017 18:52:06 -0500 Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 3ynvMS26Kpz1qyvP; Fri, 1 Dec 2017 00:52:04 +0100 (CET) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 3ynvMS1rfNz22LPp; Fri, 1 Dec 2017 00:52:04 +0100 (CET) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id 9w4PIP_2VyZq; Fri, 1 Dec 2017 00:52:02 +0100 (CET) X-Auth-Info: kMsqcT/tj89cigIH7GciEttqupUTVxHhWY5gILvWcQE= Received: from localhost.localdomain (89-64-27-66.dynamic.chello.pl [89.64.27.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Fri, 1 Dec 2017 00:52:02 +0100 (CET) From: Lukasz Majewski To: Alexander Sverdlin , Arnd Bergmann , arndbergmann@gmail.com, Hartley Sweeten Cc: Russell King , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Olof Johansson , Linus Walleij , Lukasz Majewski Subject: [PATCH v4 5/5] ARM: ep93xx: ts72xx: Add support for BK3 board - ts72xx derivative Date: Fri, 1 Dec 2017 00:51:40 +0100 Message-Id: <20171130235140.12243-6-lukma@denx.de> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171130235140.12243-1-lukma@denx.de> References: <20171116232239.16823-1-lukma@denx.de> <20171130235140.12243-1-lukma@denx.de> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The BK3 board is a derivative of the ts72xx reference design. Signed-off-by: Lukasz Majewski --- Changes for v2: - Place bk3 support code to the ts72xx.c file Changes for v3: - Add SD card support (via SPI) for BK3 - Remove definition of apb:i2s bus - Remove board registration of CPLD WDT device - Add I2S platform device to BK3 - Add MAINTAINERS entry for BK3 maintainer Changes for v4: - Adjust the code to be applicable on top of linux-next/master --- MAINTAINERS | 6 ++ arch/arm/mach-ep93xx/Kconfig | 7 ++ arch/arm/mach-ep93xx/ts72xx.c | 146 ++++++++++++++++++++++++++++++++++++++++++ arch/arm/mach-ep93xx/ts72xx.h | 5 ++ arch/arm/tools/mach-types | 1 + 5 files changed, 165 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 4149cd992825..2fc98b40268d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1254,6 +1254,12 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Supported F: drivers/net/ethernet/cavium/thunder/ +ARM/CIRRUS LOGIC BK3 MACHINE SUPPORT +M: Lukasz Majewski +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: arch/arm/mach-ep93xx/ts72xx.c + ARM/CIRRUS LOGIC CLPS711X ARM ARCHITECTURE M: Alexander Shiyan L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) diff --git a/arch/arm/mach-ep93xx/Kconfig b/arch/arm/mach-ep93xx/Kconfig index 61a75ca3684e..c095236d7ff8 100644 --- a/arch/arm/mach-ep93xx/Kconfig +++ b/arch/arm/mach-ep93xx/Kconfig @@ -21,6 +21,13 @@ config MACH_ADSSPHERE Say 'Y' here if you want your kernel to support the ADS Sphere board. +config MACH_BK3 + bool "Support Liebherr BK3.1" + select MACH_TS72XX + help + Say 'Y' here if you want your kernel to support the + Liebherr controller BK3.1. + config MACH_EDB93XX bool diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c index cf269b5397e5..de3be5e3bee7 100644 --- a/arch/arm/mach-ep93xx/ts72xx.c +++ b/arch/arm/mach-ep93xx/ts72xx.c @@ -19,10 +19,15 @@ #include #include #include +#include +#include +#include #include #include #include +#include +#include #include #include @@ -221,6 +226,69 @@ static struct ep93xx_eth_data __initdata ts72xx_eth_data = { }; /************************************************************************* + * SPI SD/MMC host + *************************************************************************/ +#define BK3_EN_SDCARD_PHYS_BASE 0x12400000 +#define BK3_EN_SDCARD_PWR 0x0 +#define BK3_DIS_SDCARD_PWR 0x0C +static void bk3_mmc_spi_setpower(struct device *dev, unsigned int vdd) +{ + void __iomem *pwr_sd = ioremap(BK3_EN_SDCARD_PHYS_BASE, SZ_4K); + + if (!pwr_sd) { + pr_err("Failed to enable SD card power!"); + return; + } + + pr_debug("%s: SD card pwr %s VDD:0x%x\n", __func__, + !!vdd ? "ON" : "OFF", vdd); + + if (!!vdd) + __raw_writeb(BK3_EN_SDCARD_PWR, pwr_sd); + else + __raw_writeb(BK3_DIS_SDCARD_PWR, pwr_sd); + + iounmap(pwr_sd); +} + +static struct mmc_spi_platform_data bk3_spi_mmc_data = { + .detect_delay = 500, + .powerup_msecs = 100, + .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, + .caps = MMC_CAP_NONREMOVABLE, + .setpower = bk3_mmc_spi_setpower, +}; + +/************************************************************************* + * SPI Bus - SD card access + *************************************************************************/ +static struct spi_board_info bk3_spi_board_info[] __initdata = { + { + .modalias = "mmc_spi", + .platform_data = &bk3_spi_mmc_data, + .max_speed_hz = 7.4E6, + .bus_num = 0, + .chip_select = 0, + .mode = SPI_MODE_0, + }, +}; + +/* + * This is a stub -> the FGPIO[3] pin is not connected on the schematic + * The all work is performed automatically by !SPI_FRAME (SFRM1) and + * goes through CPLD + */ +static int bk3_spi_chipselects[] __initdata = { + EP93XX_GPIO_LINE_F(3), +}; + +static struct ep93xx_spi_info bk3_spi_master __initdata = { + .chipselect = bk3_spi_chipselects, + .num_chipselect = ARRAY_SIZE(bk3_spi_chipselects), + .use_dma = 1, +}; + +/************************************************************************* * TS72XX support code *************************************************************************/ #if IS_ENABLED(CONFIG_FPGA_MGR_TS73XX) @@ -294,3 +362,81 @@ MACHINE_START(TS72XX, "Technologic Systems TS-72xx SBC") .init_late = ep93xx_init_late, .restart = ep93xx_restart, MACHINE_END + +/************************************************************************* + * EP93xx I2S audio peripheral handling + *************************************************************************/ +static struct resource ep93xx_i2s_resource[] = { + DEFINE_RES_MEM(EP93XX_I2S_PHYS_BASE, 0x100), + DEFINE_RES_IRQ_NAMED(IRQ_EP93XX_SAI, "spilink i2s slave"), +}; + +static struct platform_device ep93xx_i2s_device = { + .name = "ep93xx-spilink-i2s", + .id = -1, + .num_resources = ARRAY_SIZE(ep93xx_i2s_resource), + .resource = ep93xx_i2s_resource, +}; + +/************************************************************************* + * BK3 support code + *************************************************************************/ +static struct mtd_partition bk3_nand_parts[] = { + { + .name = "System", + .offset = 0x00000000, + .size = 0x01e00000, + }, { + .name = "Data", + .offset = 0x01e00000, + .size = 0x05f20000 + }, { + .name = "RedBoot", + .offset = 0x07d20000, + .size = 0x002e0000, + .mask_flags = MTD_WRITEABLE, /* force RO */ + }, +}; + +static struct map_desc bk3_io_desc[] __initdata = { + { + .virtual = BK3_CPLDVER_VIRT_BASE, + .pfn = __phys_to_pfn(BK3_CPLDVER_PHYS_BASE), + .length = BK3_CPLDVER_SIZE, + .type = MT_DEVICE, + } +}; + +static void __init bk3_map_io(void) +{ + ts72xx_common_map_io(); + iotable_init(bk3_io_desc, ARRAY_SIZE(bk3_io_desc)); +} + +static void __init bk3_init_machine(void) +{ + ep93xx_init_devices(); + + ts72xx_register_flash(bk3_nand_parts, ARRAY_SIZE(bk3_nand_parts), + EP93XX_CS6_PHYS_BASE); + + ep93xx_register_eth(&ts72xx_eth_data, 1); + + ep93xx_register_spi(&bk3_spi_master, bk3_spi_board_info, + ARRAY_SIZE(bk3_spi_board_info)); + + /* Configure ep93xx's I2S to use AC97 pins */ + ep93xx_devcfg_set_bits(EP93XX_SYSCON_DEVCFG_I2SONAC97); + platform_device_register(&ep93xx_i2s_device); +} + +MACHINE_START(BK3, "Liebherr controller BK3.1") + /* Maintainer: Lukasz Majewski */ + .atag_offset = 0x100, + .map_io = bk3_map_io, + .init_irq = ep93xx_init_irq, + .init_time = ep93xx_timer_init, + .init_machine = bk3_init_machine, + .init_late = ep93xx_init_late, + .restart = ep93xx_restart, +MACHINE_END diff --git a/arch/arm/mach-ep93xx/ts72xx.h b/arch/arm/mach-ep93xx/ts72xx.h index 7b7490f10fa9..61410faa3785 100644 --- a/arch/arm/mach-ep93xx/ts72xx.h +++ b/arch/arm/mach-ep93xx/ts72xx.h @@ -42,6 +42,11 @@ #define TS72XX_OPTIONS2_TS9420 0x04 #define TS72XX_OPTIONS2_TS9420_BOOT 0x02 +/* BK3 specific defines */ +#define BK3_CPLDVER_PHYS_BASE 0x23400000 +#define BK3_CPLDVER_VIRT_BASE 0xfebfd000 +#define BK3_CPLDVER_SIZE 0x00001000 + #ifndef __ASSEMBLY__ static inline int ts72xx_model(void) diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types index a9313b66f770..4eac94c1eb6f 100644 --- a/arch/arm/tools/mach-types +++ b/arch/arm/tools/mach-types @@ -345,6 +345,7 @@ mxlads MACH_MXLADS MXLADS 1851 linkstation_mini MACH_LINKSTATION_MINI LINKSTATION_MINI 1858 afeb9260 MACH_AFEB9260 AFEB9260 1859 imx27ipcam MACH_IMX27IPCAM IMX27IPCAM 1871 +bk3 MACH_BK3 BK3 1880 rd88f6183ap_ge MACH_RD88F6183AP_GE RD88F6183AP_GE 1894 realview_pba8 MACH_REALVIEW_PBA8 REALVIEW_PBA8 1897 realview_pbx MACH_REALVIEW_PBX REALVIEW_PBX 1901 -- 2.11.0 From 1585473892323562556@xxx Thu Nov 30 07:08:50 +0000 2017 X-GM-THRID: 1584299915922326607 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread