Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/605497/?format=api
{ "id": 605497, "url": "http://patchwork.ozlabs.org/api/patches/605497/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/1459642206-20101-1-git-send-email-eddy.petrisor@gmail.com/", "project": { "id": 18, "url": "http://patchwork.ozlabs.org/api/projects/18/?format=api", "name": "U-Boot", "link_name": "uboot", "list_id": "u-boot.lists.denx.de", "list_email": "u-boot@lists.denx.de", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<1459642206-20101-1-git-send-email-eddy.petrisor@gmail.com>", "list_archive_url": null, "date": "2016-04-03T00:10:05", "name": "[U-Boot,1/2] serial: Introduce linflex uart support", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "8382ef88f3a382a89c9db5b63db5e417a858308b", "submitter": { "id": 68207, "url": "http://patchwork.ozlabs.org/api/people/68207/?format=api", "name": "Eddy Petrișor", "email": "eddy.petrisor@gmail.com" }, "delegate": { "id": 56520, "url": "http://patchwork.ozlabs.org/api/users/56520/?format=api", "username": "bmeng", "first_name": "Bin", "last_name": "Meng", "email": "bmeng.cn@gmail.com" }, "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/1459642206-20101-1-git-send-email-eddy.petrisor@gmail.com/mbox/", "series": [], "comments": "http://patchwork.ozlabs.org/api/patches/605497/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/605497/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<u-boot-bounces@lists.denx.de>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Received": [ "from theia.denx.de (theia.denx.de [85.214.87.163])\n\tby ozlabs.org (Postfix) with ESMTP id 3qcwVJ4MrBz9t3Z\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSun, 3 Apr 2016 10:10:00 +1000 (AEST)", "from localhost (localhost [127.0.0.1])\n\tby theia.denx.de (Postfix) with ESMTP id 5ECD5A7609;\n\tSun, 3 Apr 2016 02:09:58 +0200 (CEST)", "from theia.denx.de ([127.0.0.1])\n\tby localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id cwsyAuvShyMR; Sun, 3 Apr 2016 02:09:58 +0200 (CEST)", "from theia.denx.de (localhost [127.0.0.1])\n\tby theia.denx.de (Postfix) with ESMTP id 987CCA75FB;\n\tSun, 3 Apr 2016 02:09:57 +0200 (CEST)", "from localhost (localhost [127.0.0.1])\n\tby theia.denx.de (Postfix) with ESMTP id 74D4BA75FB\n\tfor <u-boot@lists.denx.de>; Sun, 3 Apr 2016 02:09:53 +0200 (CEST)", "from theia.denx.de ([127.0.0.1])\n\tby localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id EwrFhLIInIBt for <u-boot@lists.denx.de>;\n\tSun, 3 Apr 2016 02:09:53 +0200 (CEST)", "from mail-lf0-f65.google.com (mail-lf0-f65.google.com\n\t[209.85.215.65]) by theia.denx.de (Postfix) with ESMTPS id 10C3DA748F\n\tfor <u-boot@lists.denx.de>; Sun, 3 Apr 2016 02:09:48 +0200 (CEST)", "by mail-lf0-f65.google.com with SMTP id r62so3525950lfd.0\n\tfor <u-boot@lists.denx.de>; Sat, 02 Apr 2016 17:09:48 -0700 (PDT)", "from heidi.eddyp.homeunix.net ([82.77.160.119])\n\tby smtp.gmail.com with ESMTPSA id\n\te80sm6341839wma.1.2016.04.02.17.09.46\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n\tSat, 02 Apr 2016 17:09:47 -0700 (PDT)" ], "Authentication-Results": "ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com header.b=xmlQU1Pp;\n\tdkim-atps=neutral", "X-policyd-weight": "NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5\n\tNOT_IN_BL_NJABL=-1.5 (only DNSBL check requested)", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;\n\th=from:to:cc:subject:date:message-id:mime-version\n\t:content-transfer-encoding;\n\tbh=Zp0M5jvBKY9W6DCTdBNwKzsmR/bEaUliO6bUfyQlwN4=;\n\tb=xmlQU1PpK7037ibtkvqCdnyBEL7JvSShzbPkSsbTk6l4n893F8HCPwkmcRn0bNgXih\n\tDbgozgWn1pXHH2spqG1x4y3B5+k3NmHTnoBHp08X9CI9FgN9jRn7CJ365lNRIASYar01\n\tBDnURVn8hR07BD49eAXqCWKka7UHVargR6k4yiKg3RSZVnxJObjovNqh4FYXQafEu8ZX\n\tVvnXSCGhmun3IDyWgxdfTskiUFMVTVnKxoVn1uYvi0a2biBL0KY4c2aHDPyDCZKM3zcm\n\tbNFhruLRuKKfIjDVMlE6VvaHbZvZtkagxtIrQ5F3rbiI2qnTyGIYNg/7xLzk7KY+N5oR\n\tAKeQ==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20130820;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version\n\t:content-transfer-encoding;\n\tbh=Zp0M5jvBKY9W6DCTdBNwKzsmR/bEaUliO6bUfyQlwN4=;\n\tb=ArpA9lqcLYwQsdurKSrlO/iyl0hwzQRYh/++r51yw2TfukGKeMDvBr7azIYWuEXPQU\n\tooWLiJL7awm2HWDjqA+LsYv6c1tY9z9Y8IJOPtKALqUtfSkHaQ6G1Zgelvapk6gzMiTp\n\t8HBTdZQh7RnKSMxfiQc75wJvf7wUKa0kqA7gOWaAMq3fMqKIeJxmFYm64wr7O7l/uQ48\n\toL6D5W3h/8TxNvgvp8r/mGvlohDbp0iSmYI1NBcRJTWwuXPYV9L31Nde0+k9q77rJMhL\n\tBLSu2XbidMAZtPjsOVP52IerFzt7XyD5wRkSizrsjrJvPhm5SW5dCPeLXJZ3S6aArPAL\n\tIi/w==", "X-Gm-Message-State": "AD7BkJKYE7yWJD9hhgaRDMcaGfTOvj6SH6OGaPNrR4t+SF43zP3QOQEeEiLO8BrBwWfY2Q==", "X-Received": "by 10.194.95.198 with SMTP id dm6mr12783831wjb.136.1459642188028;\n\tSat, 02 Apr 2016 17:09:48 -0700 (PDT)", "From": "=?UTF-8?q?Eddy=20Petri=C8=99or?= <eddy.petrisor@gmail.com>", "To": "U-Boot Mailing List <u-boot@lists.denx.de>", "Date": "Sun, 3 Apr 2016 03:10:05 +0300", "Message-Id": "<1459642206-20101-1-git-send-email-eddy.petrisor@gmail.com>", "X-Mailer": "git-send-email 2.1.4", "MIME-Version": "1.0", "Cc": "=?UTF-8?q?Eddy=20Petri=C8=99or?= <eddy.petrisor@gmail.com>,\n\tStoica Cosmin-Stefan <cosminstefan.stoica@freescale.com>,\n\tDepons Eric <eric.depons@freescale.com>,\n\tChircu Bogdan <Bogdan.Chircu@freescale.com>", "Subject": "[U-Boot] [PATCH 1/2] serial: Introduce linflex uart support", "X-BeenThere": "u-boot@lists.denx.de", "X-Mailman-Version": "2.1.15", "Precedence": "list", "List-Id": "U-Boot discussion <u-boot.lists.denx.de>", "List-Unsubscribe": "<http://lists.denx.de/mailman/options/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=unsubscribe>", "List-Archive": "<http://lists.denx.de/pipermail/u-boot/>", "List-Post": "<mailto:u-boot@lists.denx.de>", "List-Help": "<mailto:u-boot-request@lists.denx.de?subject=help>", "List-Subscribe": "<http://lists.denx.de/mailman/listinfo/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=subscribe>", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "base64", "Errors-To": "u-boot-bounces@lists.denx.de", "Sender": "\"U-Boot\" <u-boot-bounces@lists.denx.de>" }, "content": "From: Stoica Cosmin-Stefan <cosminstefan.stoica@freescale.com>\n\nThe Linflex module is integrated on some NXP automotive SoCs part of the former\nFreescale portfolio, like S32V234, an SoC for Advanced Driver Assistance\nSystems.\n\nSigned-off-by: Stoica Cosmin-Stefan <cosminstefan.stoica@freescale.com>\nSigned-off-by: Chircu Bogdan <Bogdan.Chircu@freescale.com>\nSigned-off-by: Depons Eric <eric.depons@freescale.com>\nSigned-off-by: Eddy Petrișor <eddy.petrisor@gmail.com>\n---\n drivers/serial/Makefile | 1 +\n drivers/serial/serial_linflexuart.c | 147 ++++++++++++++++++++++++++++++++++++\n 2 files changed, 148 insertions(+)\n create mode 100644 drivers/serial/serial_linflexuart.c", "diff": "diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile\nindex ee7147a..b009478 100644\n--- a/drivers/serial/Makefile\n+++ b/drivers/serial/Makefile\n@@ -33,6 +33,7 @@ obj-$(CONFIG_SCIF_CONSOLE) += serial_sh.o\n obj-$(CONFIG_ZYNQ_SERIAL) += serial_zynq.o\n obj-$(CONFIG_BFIN_SERIAL) += serial_bfin.o\n obj-$(CONFIG_FSL_LPUART) += serial_lpuart.o\n+obj-$(CONFIG_FSL_LINFLEXUART) += serial_linflexuart.o\n obj-$(CONFIG_ARC_SERIAL) += serial_arc.o\n obj-$(CONFIG_UNIPHIER_SERIAL) += serial_uniphier.o\n obj-$(CONFIG_STM32_SERIAL) += serial_stm32.o\ndiff --git a/drivers/serial/serial_linflexuart.c b/drivers/serial/serial_linflexuart.c\nnew file mode 100644\nindex 0000000..3c619ce\n--- /dev/null\n+++ b/drivers/serial/serial_linflexuart.c\n@@ -0,0 +1,147 @@\n+/*\n+ * (C) Copyright 2013-2016 Freescale Semiconductor, Inc.\n+ *\n+ * SPDX-License-Identifier: GPL-2.0+\n+ */\n+\n+#include <common.h>\n+#include <watchdog.h>\n+#include <asm/io.h>\n+#include <serial.h>\n+#include <linux/compiler.h>\n+#include <asm/arch/imx-regs.h>\n+#include <asm/arch/clock.h>\n+\n+#define US1_TDRE (1 << 7)\n+#define US1_RDRF (1 << 5)\n+#define UC2_TE (1 << 3)\n+#define LINCR1_INIT (1 << 0)\n+#define LINCR1_MME (1 << 4)\n+#define LINCR1_BF (1 << 7)\n+#define LINSR_LINS_INITMODE (0x00001000)\n+#define LINSR_LINS_MASK (0x0000F000)\n+#define UARTCR_UART (1 << 0)\n+#define UARTCR_WL0 (1 << 1)\n+#define UARTCR_PCE (1 << 2)\n+#define UARTCR_PC0 (1 << 3)\n+#define UARTCR_TXEN (1 << 4)\n+#define UARTCR_RXEN (1 << 5)\n+#define UARTCR_PC1 (1 << 6)\n+#define UARTSR_DTF (1 << 1)\n+#define UARTSR_DRF (1 << 2)\n+#define UARTSR_RMB (1 << 9)\n+\n+DECLARE_GLOBAL_DATA_PTR;\n+\n+struct linflex_fsl *base = (struct linflex_fsl *)LINFLEXUART_BASE;\n+\n+static void linflex_serial_setbrg(void)\n+{\n+\tu32 clk = mxc_get_clock(MXC_UART_CLK);\n+\tu32 ibr, fbr;\n+\n+\tif (!gd->baudrate)\n+\t\tgd->baudrate = CONFIG_BAUDRATE;\n+\n+\tibr = (u32) (clk / (16 * gd->baudrate));\n+\tfbr = (u32) (clk % (16 * gd->baudrate)) * 16;\n+\n+\t__raw_writel(ibr, &base->linibrr);\n+\t__raw_writel(fbr, &base->linfbrr);\n+}\n+\n+static int linflex_serial_getc(void)\n+{\n+\tchar c;\n+\n+\t/* waiting for data reception complete - TODO: add a timeout */\n+\twhile ((__raw_readb(&base->uartsr) & UARTSR_DRF) != UARTSR_DRF);\n+\n+\t/* waiting for data buffer to be ready - TODO: add a timeout */\n+\n+\twhile ((__raw_readl(&base->uartsr) & UARTSR_RMB) != UARTSR_RMB);\n+\n+\tc = __raw_readl(&base->bdrm);\n+\t__raw_writeb((__raw_readb(&base->uartsr) | (UARTSR_DRF | UARTSR_RMB)),\n+\t\t &base->uartsr);\n+\treturn c;\n+}\n+\n+static void linflex_serial_putc(const char c)\n+{\n+\tif (c == '\\n')\n+\t\tserial_putc('\\r');\n+\n+\t__raw_writeb(c, &base->bdrl);\n+\n+\t/* waiting for data transmission completed - TODO: add a timeout */\n+\twhile ((__raw_readb(&base->uartsr) & UARTSR_DTF) != UARTSR_DTF);\n+\n+\t__raw_writeb((__raw_readb(&base->uartsr) | UARTSR_DTF), &base->uartsr);\n+}\n+\n+/*\n+ * Test whether a character is in the RX buffer\n+ */\n+static int linflex_serial_tstc(void)\n+{\n+\treturn 0;\n+}\n+\n+/*\n+ * Initialise the serial port with the given baudrate. The settings\n+ * are always 8 data bits, no parity, 1 stop bit, no start bits.\n+ */\n+static int linflex_serial_init(void)\n+{\n+\tvolatile u32 ctrl;\n+\n+\t/* set the Linflex in master mode amd activate by-pass filter */\n+\tctrl = LINCR1_BF | LINCR1_MME;\n+\t__raw_writel(ctrl, &base->lincr1);\n+\n+\t/* init mode */\n+\tctrl |= LINCR1_INIT;\n+\t__raw_writel(ctrl, &base->lincr1);\n+\n+\t/* waiting for init mode entry - TODO: add a timeout */\n+\twhile ((__raw_readl(&base->linsr) & LINSR_LINS_MASK) !=\n+\t LINSR_LINS_INITMODE);\n+\n+\t/* set UART bit to allow writing other bits */\n+\t__raw_writel(UARTCR_UART, &base->uartcr);\n+\n+\t/* provide data bits, parity, stop bit, etc */\n+\tserial_setbrg();\n+\n+\t/* 8 bit data, no parity, Tx and Rx enabled, UART mode */\n+\t__raw_writel(UARTCR_PC1 | UARTCR_RXEN | UARTCR_TXEN | UARTCR_PC0\n+\t\t | UARTCR_WL0 | UARTCR_UART, &base->uartcr);\n+\n+\tctrl = __raw_readl(&base->lincr1);\n+\tctrl &= ~LINCR1_INIT;\n+\t__raw_writel(ctrl, &base->lincr1);\t/* end init mode */\n+\n+\treturn 0;\n+}\n+\n+static struct serial_device linflex_serial_drv = {\n+\t.name = \"linflex_serial\",\n+\t.start = linflex_serial_init,\n+\t.stop = NULL,\n+\t.setbrg = linflex_serial_setbrg,\n+\t.putc = linflex_serial_putc,\n+\t.puts = default_serial_puts,\n+\t.getc = linflex_serial_getc,\n+\t.tstc = linflex_serial_tstc,\n+};\n+\n+void linflex_serial_initialize(void)\n+{\n+\tserial_register(&linflex_serial_drv);\n+}\n+\n+__weak struct serial_device *default_serial_console(void)\n+{\n+\treturn &linflex_serial_drv;\n+}\n", "prefixes": [ "U-Boot", "1/2" ] }