From patchwork Tue Jun 22 04:24:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kunihiko Hayashi X-Patchwork-Id: 465152 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp289306jao; Mon, 21 Jun 2021 21:24:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyZ/TOjX2d/TX6hA73qaXxL8bITHz/4xPlQPqHJONQQMEJclvgb0E7omGxYm9RXpBcTmx8Z X-Received: by 2002:a05:6402:3581:: with SMTP id y1mr2190699edc.31.1624335890719; Mon, 21 Jun 2021 21:24:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1624335890; cv=none; d=google.com; s=arc-20160816; b=jfAxOCXpaKfWwc3NXfPN//8vPBHOCUr35L1NLLzRQZm6g3stiYkAcPd+5eGqhxfesq yoNogC3fWmC3fKCUzAdPk0P8uSeucZlnzCFIZO9UQbNojumh/MuNfTQzzNWByEoNcWj/ OXJuC9WiGk7dl0TyJC6aNmQDHSJ2J2HvI/tPKZZK0rSzOPzMUuoFJCC9wD/LQ5VMqkxd QZ2ECgWOejGOtaZnKbzJZp9PcDE7BLCgZ3nj5QMyNsDywPnM+IEXDLr6hruuCqtwPegu k9WJze9Hlx9UrWJyWxlTJ6oz6jCHyTr0C1pRhNHx9o6L/s8Xphl9uvbDt39Nf9fhSo3r sMqA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:message-id:date:subject:cc:to :from; bh=k83ixP5V8v/L7zc34LBKDnM/NcsuePhyelkvKkTIxSc=; b=fLeSnKKGNifSKe3+vAkT/ARnfy8j0/Aildp18HLCU+GeE7ddJ7o7wODcyoHDOveT3f j3NKQzfVmUHb3bU1bgB12rsKSi4vl0oO2R5omaCo5yzn/utshkUXyAMVk4zvdB3ZFjyQ goDNZsp+d5MsObresBvUe48/zRCBzUzJN9pMiYasdcZJqpxP/NVYq3MHXUmUEczi0l1B CGJ8hbCYhhU/j13GrucL24ijykAYyJaFx2rh0uTwbwd6hGytcaC9lFeIl2z9HhqIn4JS 2Ku6VYs1f3xRFnVnmXqHOWaMfgzIhrHtZSQrwGvS8b76tSopsaGkxkpQ0EESXnguO0pg zg1g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Return-Path: Received: from phobos.denx.de (phobos.denx.de. [85.214.62.61]) by mx.google.com with ESMTPS id kl18si13680108ejc.160.2021.06.21.21.24.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Jun 2021 21:24:50 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) client-ip=85.214.62.61; Authentication-Results: mx.google.com; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 67E1180EC6; Tue, 22 Jun 2021 06:24:47 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=socionext.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by phobos.denx.de (Postfix, from userid 109) id 51C8A828EB; Tue, 22 Jun 2021 06:24:45 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, T_SPF_HELO_TEMPERROR autolearn=ham autolearn_force=no version=3.4.2 Received: from mx.socionext.com (mx.socionext.com [202.248.49.38]) by phobos.denx.de (Postfix) with ESMTP id E60B880C67 for ; Tue, 22 Jun 2021 06:24:37 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=socionext.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=hayashi.kunihiko@socionext.com Received: from unknown (HELO iyokan2-ex.css.socionext.com) ([172.31.9.54]) by mx.socionext.com with ESMTP; 22 Jun 2021 13:24:35 +0900 Received: from mail.mfilter.local (m-filter-2 [10.213.24.62]) by iyokan2-ex.css.socionext.com (Postfix) with ESMTP id F3BDE20566E0; Tue, 22 Jun 2021 13:24:34 +0900 (JST) Received: from 172.31.9.51 (172.31.9.51) by m-FILTER with ESMTP; Tue, 22 Jun 2021 13:24:35 +0900 Received: from plum.e01.socionext.com (unknown [10.212.243.119]) by kinkan2.css.socionext.com (Postfix) with ESMTP id A0BE4B62AB; Tue, 22 Jun 2021 13:24:34 +0900 (JST) From: Kunihiko Hayashi To: Michal Simek Cc: u-boot@lists.denx.de, Kunihiko Hayashi Subject: [PATCH] serial: zynq: Add support for serial parameters Date: Tue, 22 Jun 2021 13:24:21 +0900 Message-Id: <1624335861-4025-1-git-send-email-hayashi.kunihiko@socionext.com> X-Mailer: git-send-email 2.7.4 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de X-Virus-Status: Clean This adds serial parameters that include stop bit mode, parity mode, and character length. Mark parity and space parity modes are not supported. Signed-off-by: Kunihiko Hayashi --- drivers/serial/serial_zynq.c | 64 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) -- 2.7.4 diff --git a/drivers/serial/serial_zynq.c b/drivers/serial/serial_zynq.c index 799d524..a644e78 100644 --- a/drivers/serial/serial_zynq.c +++ b/drivers/serial/serial_zynq.c @@ -28,7 +28,17 @@ #define ZYNQ_UART_CR_TXRST BIT(1) /* TX logic reset */ #define ZYNQ_UART_CR_RXRST BIT(0) /* RX logic reset */ +#define ZYNQ_UART_MR_STOPMODE_2_BIT 0x00000080 /* 2 stop bits */ +#define ZYNQ_UART_MR_STOPMODE_1_5_BIT 0x00000040 /* 1.5 stop bits */ +#define ZYNQ_UART_MR_STOPMODE_1_BIT 0x00000000 /* 1 stop bit */ + #define ZYNQ_UART_MR_PARITY_NONE 0x00000020 /* No parity mode */ +#define ZYNQ_UART_MR_PARITY_ODD 0x00000008 /* Odd parity mode */ +#define ZYNQ_UART_MR_PARITY_EVEN 0x00000000 /* Even parity mode */ + +#define ZYNQ_UART_MR_CHARLEN_6_BIT 0x00000006 /* 6 bits data */ +#define ZYNQ_UART_MR_CHARLEN_7_BIT 0x00000004 /* 7 bits data */ +#define ZYNQ_UART_MR_CHARLEN_8_BIT 0x00000000 /* 8 bits data */ struct uart_zynq { u32 control; /* 0x0 - Control Register [8:0] */ @@ -137,6 +147,59 @@ static int zynq_serial_setbrg(struct udevice *dev, int baudrate) return 0; } +static int zynq_serial_setconfig(struct udevice *dev, uint serial_config) +{ + struct zynq_uart_plat *plat = dev_get_plat(dev); + struct uart_zynq *regs = plat->regs; + u32 val = 0; + + switch (SERIAL_GET_BITS(serial_config)) { + case SERIAL_6_BITS: + val |= ZYNQ_UART_MR_CHARLEN_6_BIT; + break; + case SERIAL_7_BITS: + val |= ZYNQ_UART_MR_CHARLEN_7_BIT; + break; + case SERIAL_8_BITS: + val |= ZYNQ_UART_MR_CHARLEN_8_BIT; + break; + default: + return -ENOTSUPP; /* not supported in driver */ + } + + switch (SERIAL_GET_STOP(serial_config)) { + case SERIAL_ONE_STOP: + val |= ZYNQ_UART_MR_STOPMODE_1_BIT; + break; + case SERIAL_ONE_HALF_STOP: + val |= ZYNQ_UART_MR_STOPMODE_1_5_BIT; + break; + case SERIAL_TWO_STOP: + val |= ZYNQ_UART_MR_STOPMODE_2_BIT; + break; + default: + return -ENOTSUPP; /* not supported in driver */ + } + + switch (SERIAL_GET_PARITY(serial_config)) { + case SERIAL_PAR_NONE: + val |= ZYNQ_UART_MR_PARITY_NONE; + break; + case SERIAL_PAR_ODD: + val |= ZYNQ_UART_MR_PARITY_ODD; + break; + case SERIAL_PAR_EVEN: + val |= ZYNQ_UART_MR_PARITY_EVEN; + break; + default: + return -ENOTSUPP; /* not supported in driver */ + } + + writel(val, ®s->mode); + + return 0; +} + static int zynq_serial_probe(struct udevice *dev) { struct zynq_uart_plat *plat = dev_get_plat(dev); @@ -198,6 +261,7 @@ static const struct dm_serial_ops zynq_serial_ops = { .pending = zynq_serial_pending, .getc = zynq_serial_getc, .setbrg = zynq_serial_setbrg, + .setconfig = zynq_serial_setconfig, }; static const struct udevice_id zynq_serial_ids[] = {