From patchwork Mon Feb 12 16:38:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 872146 X-Patchwork-Delegate: daniel.schwierzeck@googlemail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="XCt+wqcV"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zgBJP4NSVz9t39 for ; Tue, 13 Feb 2018 03:41:25 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 111DCC21E76; Mon, 12 Feb 2018 16:39:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 460FBC21E65; Mon, 12 Feb 2018 16:39:08 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id D8174C21E16; Mon, 12 Feb 2018 16:39:03 +0000 (UTC) Received: from mail-wr0-f195.google.com (mail-wr0-f195.google.com [209.85.128.195]) by lists.denx.de (Postfix) with ESMTPS id DB712C21C51 for ; Mon, 12 Feb 2018 16:39:02 +0000 (UTC) Received: by mail-wr0-f195.google.com with SMTP id y3so15857319wrh.3 for ; Mon, 12 Feb 2018 08:39:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=mYr1Jqg+JTwcURbg2BZLzQg1gr3mEivwNSNAOKimSBU=; b=XCt+wqcVBccV4v65VUNmHdUYBk/6swLPLP4JZTXuWCZrIViA3ItTbqi9Slsr+nhh15 zdxkwjQX2kyAosOu3Izt2pbDrKfHDSNfSuFCfPyOlSNSeFb64t08INJ7x9QrsppjqDJ+ +TwuiCCummYnxGVvdxEyD9UeUIDMKL+m7rXSHP5dLk+83e/kNhWjUNAJ2F7Ng4CvdLIc Y8TjIzzJy0WZTdxa8u0Qddy39gCvpY41SR7unkqyEKa+1D+T592Gid2cUDag1FfSqBos aWZyIItWT7b0Qts1vxIxwHKoPjBH3Fp1hBQDYbjbsbKyZ6v1b3HTQ3yjJScuB1LSpklA x3bQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mYr1Jqg+JTwcURbg2BZLzQg1gr3mEivwNSNAOKimSBU=; b=sCYoS8OFXRnuX7d4Dn4pBJFSEvDZiS4FrKH1S0W1axoJ5HaVUhnSK0YVIdCrdKVeZN aDSXFyFCgCHHt/gkWxgvU1hi0vOh5qLN1ZJpuJEQfNvnWJVX0hzwqxCdQP1+FOiih1BH wiwWAjgW9sYW/wJftUK4svUoNKr5xWPMqA5jDRQ7RbJTCQbGzSsbaesZwhyaKN7SEU3A 4Qu9DjIFEPghzFUBkMXqG+pvMUici0A6eR6idRyP7RfZH9eaAjtgyfrwhX2ZJ++DjWp2 506vFtLJMbSDPoVgNCqbzs/mESGZ5ov3jRXaWhrabRC+zrq/QSjL9JfHhG5bMy9YDZ3E 1zKQ== X-Gm-Message-State: APf1xPD8CYgNXgporhI1IfVdelKevIzEE6OLnnBouqmHGAC2kQlUkw9w MseMFBkpiKnQgPf8fBq9nyRJTvyE X-Google-Smtp-Source: AH8x226afbmEABjDzToY1aG0+xK0j38EjhX8uJj4ba60ZY0yktT0O0xR70gAZJwz0u/zb2NVTp5q0Q== X-Received: by 10.223.135.231 with SMTP id c36mr1073766wrc.36.1518453541921; Mon, 12 Feb 2018 08:39:01 -0800 (PST) Received: from skynet.lan (175.red-2-137-31.dynamicip.rima-tde.net. [2.137.31.175]) by smtp.gmail.com with ESMTPSA id j144sm5750202wmj.45.2018.02.12.08.39.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Feb 2018 08:39:01 -0800 (PST) From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= To: u-boot@lists.denx.de, sjg@chromium.org, daniel.schwierzeck@gmail.com, mugunthanvnm@ti.com, jteki@openedev.com Date: Mon, 12 Feb 2018 17:38:45 +0100 Message-Id: <20180212163858.25601-2-noltari@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180212163858.25601-1-noltari@gmail.com> References: <20180212163858.25601-1-noltari@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [RFC 01/14] dma: add dma channels support and improve uclass X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Signed-off-by: Álvaro Fernández Rojas --- drivers/dma/dma-uclass.c | 212 ++++++++++++++++++++++++++++++++++------- drivers/mtd/spi/sf-uclass.c | 17 ++++ drivers/mtd/spi/spi_flash.c | 11 ++- include/dma-uclass.h | 110 +++++++++++++++++++++ include/dma.h | 226 +++++++++++++++++++++++++++++++++----------- include/spi_flash.h | 3 + 6 files changed, 485 insertions(+), 94 deletions(-) create mode 100644 include/dma-uclass.h diff --git a/drivers/dma/dma-uclass.c b/drivers/dma/dma-uclass.c index 3d0ce22fbc..7d04d98493 100644 --- a/drivers/dma/dma-uclass.c +++ b/drivers/dma/dma-uclass.c @@ -1,59 +1,176 @@ /* - * Direct Memory Access U-Class driver + * Copyright (C) 2018 Álvaro Fernández Rojas + * Copyright (C) 2015 Texas Instruments Incorporated, + * Written by Mugunthan V N * - * (C) Copyright 2015 - * Texas Instruments Incorporated, - * - * Author: Mugunthan V N - * - * SPDX-License-Identifier: GPL-2.0+ + * SPDX-License-Identifier: GPL-2.0+ */ #include -#include #include -#include -#include +#include +#include +#include #include DECLARE_GLOBAL_DATA_PTR; -int dma_get_device(u32 transfer_type, struct udevice **devp) +static inline struct dma_ops *dma_dev_ops(struct udevice *dev) +{ + return (struct dma_ops *)dev->driver->ops; +} + +#if CONFIG_IS_ENABLED(OF_CONTROL) +# if CONFIG_IS_ENABLED(OF_PLATDATA) +int dma_get_by_index_platdata(struct udevice *dev, int index, + struct phandle_2_cell *cells, struct dma *dma) { - struct udevice *dev; int ret; - for (ret = uclass_first_device(UCLASS_DMA, &dev); dev && !ret; - ret = uclass_next_device(&dev)) { - struct dma_dev_priv *uc_priv; + if (index != 0) + return -ENOSYS; + ret = uclass_get_device(UCLASS_DMA, 0, &dma->dev); + if (ret) + return ret; + dma->id = cells[0].id; - uc_priv = dev_get_uclass_priv(dev); - if (uc_priv->supported & transfer_type) - break; - } + return 0; +} +# else +static int dma_of_xlate_default(struct dma *dma, + struct fdtdec_phandle_args *args) +{ + debug("%s(dma=%p)\n", __func__, dma); - if (!dev) { - pr_err("No DMA device found that supports %x type\n", - transfer_type); - return -EPROTONOSUPPORT; + if (args->args_count > 1) { + pr_err("Invaild args_count: %d\n", args->args_count); + return -EINVAL; } - *devp = dev; + if (args->args_count) + dma->id = args->args[0]; + else + dma->id = 0; - return ret; + return 0; } -int dma_memcpy(void *dst, void *src, size_t len) +int dma_get_by_index(struct udevice *dev, int index, struct dma *dma) { - struct udevice *dev; - const struct dma_ops *ops; int ret; + struct fdtdec_phandle_args args; + struct udevice *dev_dma; + struct dma_ops *ops; + + debug("%s(dev=%p, index=%d, dma=%p)\n", __func__, dev, index, dma); - ret = dma_get_device(DMA_SUPPORTS_MEM_TO_MEM, &dev); - if (ret < 0) + assert(dma); + ret = fdtdec_parse_phandle_with_args(gd->fdt_blob, dev_of_offset(dev), + "dmas", "#dma-cells", 0, index, + &args); + if (ret) { + pr_err("%s: fdtdec_parse_phandle_with_args failed: err=%d\n", + __func__, ret); return ret; + } + + ret = uclass_get_device_by_of_offset(UCLASS_DMA, args.node, &dev_dma); + if (ret) { + pr_err("%s: uclass_get_device_by_of_offset failed: err=%d\n", + __func__, ret); + return ret; + } + + dma->dev = dev_dma; + + ops = dma_dev_ops(dev_dma); + + if (ops->of_xlate) + ret = ops->of_xlate(dma, &args); + else + ret = dma_of_xlate_default(dma, &args); + if (ret) { + pr_err("of_xlate() failed: %d\n", ret); + return ret; + } + + return dma_request(dev_dma, dma); +} +# endif /* OF_PLATDATA */ + +int dma_get_by_name(struct udevice *dev, const char *name, struct dma *dma) +{ + int index; + + debug("%s(dev=%p, name=%s, dma=%p)\n", __func__, dev, name, dma); + + index = fdt_stringlist_search(gd->fdt_blob, dev_of_offset(dev), + "dma-names", name); + if (index < 0) { + pr_err("fdt_stringlist_search() failed: %d\n", index); + return index; + } + + return dma_get_by_index(dev, index, dma); +} +#endif /* OF_CONTROL */ + +int dma_request(struct udevice *dev, struct dma *dma) +{ + struct dma_ops *ops = dma_dev_ops(dev); + + debug("%s(dev=%p, dma=%p)\n", __func__, dev, dma); + + dma->dev = dev; + + if (!ops->request) + return 0; + + return ops->request(dma); +} + +int dma_free(struct dma *dma) +{ + struct dma_ops *ops = dma_dev_ops(dma->dev); + + debug("%s(dma=%p)\n", __func__, dma); + + if (!ops->free) + return 0; + + return ops->free(dma); +} + +int dma_enable(struct dma *dma) +{ + struct dma_ops *ops = dma_dev_ops(dma->dev); + + debug("%s(dma=%p)\n", __func__, dma); + + if (!ops->enable) + return -ENOSYS; + + return ops->enable(dma); +} + +int dma_disable(struct dma *dma) +{ + struct dma_ops *ops = dma_dev_ops(dma->dev); + + debug("%s(dma=%p)\n", __func__, dma); + + if (!ops->disable) + return -ENOSYS; + + return ops->disable(dma); +} + +int dma_memcpy(struct dma *dma, void *dst, void *src, size_t len) +{ + struct dma_ops *ops = dma_dev_ops(dma->dev); + + debug("%s(dma=%p)\n", __func__, dma); - ops = device_get_ops(dev); if (!ops->transfer) return -ENOSYS; @@ -61,12 +178,35 @@ int dma_memcpy(void *dst, void *src, size_t len) invalidate_dcache_range((unsigned long)dst, (unsigned long)dst + roundup(len, ARCH_DMA_MINALIGN)); - return ops->transfer(dev, DMA_MEM_TO_MEM, dst, src, len); + return ops->transfer(dma, DMA_MEM_TO_MEM, dst, src, len); +} + +int dma_receive(struct dma *dma, void **dst) +{ + struct dma_ops *ops = dma_dev_ops(dma->dev); + + debug("%s(dma=%p)\n", __func__, dma); + + if (!ops->receive) + return -1; + + return ops->receive(dma, dst); +} + +int dma_send(struct dma *dma, void *src, size_t len) +{ + struct dma_ops *ops = dma_dev_ops(dma->dev); + + debug("%s(dma=%p)\n", __func__, dma); + + if (!ops->send) + return -1; + + return ops->send(dma, src, len); } UCLASS_DRIVER(dma) = { - .id = UCLASS_DMA, - .name = "dma", - .flags = DM_UC_FLAG_SEQ_ALIAS, - .per_device_auto_alloc_size = sizeof(struct dma_dev_priv), + .id = UCLASS_DMA, + .name = "dma", + .flags = DM_UC_FLAG_SEQ_ALIAS, }; diff --git a/drivers/mtd/spi/sf-uclass.c b/drivers/mtd/spi/sf-uclass.c index 83876485fe..992dead1a2 100644 --- a/drivers/mtd/spi/sf-uclass.c +++ b/drivers/mtd/spi/sf-uclass.c @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -72,6 +73,22 @@ int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs, return ret; *devp = slave->dev; + +#ifdef CONFIG_DMA + if (fdtdec_lookup_phandle(gd->fdt_blob, dev_of_offset(*devp), + "dmas") > 0) { + struct spi_flash *priv = dev_get_uclass_priv(*devp); + + priv->dma = calloc(1, sizeof(struct dma)); + if (!priv->dma) + return -ENOMEM; + + ret = dma_get_by_index(*devp, 0, priv->dma); + if (ret) + return -EINVAL; + } +#endif + return 0; } diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c index 294d9f9d79..8b1c6a27de 100644 --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -458,10 +458,6 @@ int spi_flash_read_common(struct spi_flash *flash, const u8 *cmd, */ void __weak spi_flash_copy_mmap(void *data, void *offset, size_t len) { -#ifdef CONFIG_DMA - if (!dma_memcpy(data, offset, len)) - return; -#endif memcpy(data, offset, len); } @@ -482,7 +478,12 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset, return ret; } spi_xfer(spi, 0, NULL, NULL, SPI_XFER_MMAP); - spi_flash_copy_mmap(data, flash->memory_map + offset, len); + if (flash->dma) + dma_memcpy(flash->dma, data, + flash->memory_map + offset, len); + else + spi_flash_copy_mmap(data, flash->memory_map + offset, + len); spi_xfer(spi, 0, NULL, NULL, SPI_XFER_MMAP_END); spi_release_bus(spi); return 0; diff --git a/include/dma-uclass.h b/include/dma-uclass.h new file mode 100644 index 0000000000..0315e54441 --- /dev/null +++ b/include/dma-uclass.h @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2018 Álvaro Fernández Rojas + * Copyright (C) 2015 Texas Instruments Incorporated, + * Written by Mugunthan V N + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef _DMA_UCLASS_H +#define _DMA_UCLASS_H + +/* See dma.h for background documentation. */ + +#include +#include + +/** + * struct dma_ops - The functions that a DMA driver must implement. + */ +struct dma_ops { + /** + * of_xlate - Translate a client's device-tree (OF) DMA specifier. + * + * The DMA core calls this function as the first step in implementing + * a client's dma_get_by_*() call. + * + * If this function pointer is set to NULL, the DMA core will use a + * default implementation, which assumes #dma-cells = <1>, and that + * the DT cell contains a simple integer DMA Channel. + * + * At present, the DMA API solely supports device-tree. If this + * changes, other xxx_xlate() functions may be added to support those + * other mechanisms. + * + * @dma: The dma struct to hold the translation result. + * @args: The dma specifier values from device tree. + * @return 0 if OK, or a negative error code. + */ + int (*of_xlate)(struct dma *dma, + struct fdtdec_phandle_args *args); + /** + * request - Request a translated DMA. + * + * The DMA core calls this function as the second step in + * implementing a client's dma_get_by_*() call, following a successful + * xxx_xlate() call, or as the only step in implementing a client's + * dma_request() call. + * + * @dma: The DMA struct to request; this has been filled in by + * a previoux xxx_xlate() function call, or by the caller of + * dma_request(). + * @return 0 if OK, or a negative error code. + */ + int (*request)(struct dma *dma); + /** + * free - Free a previously requested dma. + * + * This is the implementation of the client dma_free() API. + * + * @dma: The DMA to free. + * @return 0 if OK, or a negative error code. + */ + int (*free)(struct dma *dma); + /** + * enable() - Enable a DMA Channel. + * + * @dma: The DMA Channel to manipulate. + * @return zero on success, or -ve error code. + */ + int (*enable)(struct dma *dma); + /** + * disable() - Disable a DMA Channel. + * + * @dma: The DMA Channel to manipulate. + * @return zero on success, or -ve error code. + */ + int (*disable)(struct dma *dma); + /** + * transfer() - Issue a DMA transfer. + * + * @dma: The DMA Channel to manipulate. + * @dir: The direction of data transfer. + * @dst: The destination pointer. + * @src: The source pointer. + * @len: Length of the data to be copied. + * @return zero on success, or -ve error code. + */ + int (*transfer)(struct dma *dma, enum dma_transfer_direction dir, + void *dst, void *src, size_t len); + /** + * receive() - Receive a DMA transfer. + * + * @dma: The DMA Channel to manipulate. + * @dst: The destination pointer. + * @return zero on success, or -ve error code. + */ + int (*receive)(struct dma *dma, void **dst); + /** + * send() - Send a DMA transfer. + * + * @dma: The DMA Channel to manipulate. + * @src: The source pointer. + * @len: Length of the data to be copied. + * @return zero on success, or -ve error code. + */ + int (*send)(struct dma *dma, void *src, size_t len); + +}; + +#endif /* _DMA_UCLASS_H */ diff --git a/include/dma.h b/include/dma.h index 71fa77f2ea..3632e3256d 100644 --- a/include/dma.h +++ b/include/dma.h @@ -1,86 +1,206 @@ /* - * (C) Copyright 2015 - * Texas Instruments Incorporated, + * Copyright (C) 2018 Álvaro Fernández Rojas + * Copyright (C) 2015 Texas Instruments Incorporated, + * Written by Mugunthan V N * - * SPDX-License-Identifier: GPL-2.0+ + * SPDX-License-Identifier: GPL-2.0+ */ #ifndef _DMA_H_ #define _DMA_H_ +#include +#include + /* - * enum dma_direction - dma transfer direction indicator + * enum dma_transfer_direction - dma transfer direction indicator * @DMA_MEM_TO_MEM: Memcpy mode * @DMA_MEM_TO_DEV: From Memory to Device * @DMA_DEV_TO_MEM: From Device to Memory * @DMA_DEV_TO_DEV: From Device to Device */ -enum dma_direction { +enum dma_transfer_direction { DMA_MEM_TO_MEM, DMA_MEM_TO_DEV, DMA_DEV_TO_MEM, DMA_DEV_TO_DEV, }; -#define DMA_SUPPORTS_MEM_TO_MEM BIT(0) -#define DMA_SUPPORTS_MEM_TO_DEV BIT(1) -#define DMA_SUPPORTS_DEV_TO_MEM BIT(2) -#define DMA_SUPPORTS_DEV_TO_DEV BIT(3) +/** + * A DMA is a feature of computer systems that allows certain hardware + * subsystems to access main system memory, independent of the CPU. + * DMA channels are typically generated externally to the HW module + * consuming them, by an entity this API calls a DMA provider. This API + * provides a standard means for drivers to enable and disable DMAs, and to + * copy, send and receive data using DMA. + * + * A driver that implements UCLASS_DMA is a DMA provider. A provider will + * often implement multiple separate DMAs, since the hardware it manages + * often has this capability. dma_uclass.h describes the interface which + * DMA providers must implement. + * + * DMA consumers/clients are the HW modules driven by the DMA channels. This + * header file describes the API used by drivers for those HW modules. + */ -/* - * struct dma_ops - Driver model DMA operations +struct udevice; + +/** + * struct dma - A handle to (allowing control of) a single DMA. + * + * Clients provide storage for DMA handles. The content of the structure is + * managed solely by the DMA API and DMA drivers. A DMA struct is + * initialized by "get"ing the DMA struct. The DMA struct is passed to all + * other DMA APIs to identify which DMA channel to operate upon. * - * The uclass interface is implemented by all DMA devices which use - * driver model. + * @dev: The device which implements the DMA channel. + * @id: The DMA channel ID within the provider. + * + * Currently, the DMA API assumes that a single integer ID is enough to + * identify and configure any DMA channel for any DMA provider. If this + * assumption becomes invalid in the future, the struct could be expanded to + * either (a) add more fields to allow DMA providers to store additional + * information, or (b) replace the id field with an opaque pointer, which the + * provider would dynamically allocated during its .of_xlate op, and process + * during is .request op. This may require the addition of an extra op to clean + * up the allocation. */ -struct dma_ops { +struct dma { + struct udevice *dev; /* - * Get the current timer count - * - * @dev: The DMA device - * @direction: direction of data transfer should be one from - enum dma_direction - * @dst: Destination pointer - * @src: Source pointer - * @len: Length of the data to be copied. - * @return: 0 if OK, -ve on error + * Written by of_xlate. We assume a single id is enough for now. In the + * future, we might add more fields here. */ - int (*transfer)(struct udevice *dev, int direction, void *dst, - void *src, size_t len); + unsigned long id; }; -/* - * struct dma_dev_priv - information about a device used by the uclass +#if CONFIG_IS_ENABLED(OF_CONTROL) && CONFIG_IS_ENABLED(DMA) +struct phandle_2_cell; +int dma_get_by_index_platdata(struct udevice *dev, int index, + struct phandle_2_cell *cells, struct dma *dma); + +/** + * dma_get_by_index - Get/request a DMA by integer index. + * + * This looks up and requests a DMA. The index is relative to the client + * device; each device is assumed to have n DMAs associated with it somehow, + * and this function finds and requests one of them. The mapping of client + * device DMA indices to provider DMAs may be via device-tree properties, + * board-provided mapping tables, or some other mechanism. * - * @supported: mode of transfers that DMA can support, should be - * one/multiple of DMA_SUPPORTS_* + * @dev: The client device. + * @index: The index of the DMA to request, within the client's list of + * DMA channels. + * @dma: A pointer to a DMA struct to initialize. + * @return 0 if OK, or a negative error code. */ -struct dma_dev_priv { - u32 supported; -}; +int dma_get_by_index(struct udevice *dev, int index, struct dma *dma); -/* - * dma_get_device - get a DMA device which supports transfer - * type of transfer_type - * - * @transfer_type - transfer type should be one/multiple of - * DMA_SUPPORTS_* - * @devp - udevice pointer to return the found device - * @return - will return on success and devp will hold the - * pointer to the device +/** + * dma_get_by_name - Get/request a DMA by name. + * + * This looks up and requests a DMA. The name is relative to the client + * device; each device is assumed to have n DMAs associated with it somehow, + * and this function finds and requests one of them. The mapping of client + * device DMA names to provider DMAs may be via device-tree properties, + * board-provided mapping tables, or some other mechanism. + * + * @dev: The client device. + * @name: The name of the DMA to request, within the client's list of + * DMA channels. + * @dma: A pointer to a DMA struct to initialize. + * @return 0 if OK, or a negative error code. */ -int dma_get_device(u32 transfer_type, struct udevice **devp); +int dma_get_by_name(struct udevice *dev, const char *name, struct dma *dma); +#else +static inline int dma_get_by_index(struct udevice *dev, int index, + struct dma *dma) +{ + return -ENOSYS; +} -/* - * dma_memcpy - try to use DMA to do a mem copy which will be - * much faster than CPU mem copy - * - * @dst - destination pointer - * @src - souce pointer - * @len - data length to be copied - * @return - on successful transfer returns no of bytes - transferred and on failure return error code. +static inline int dma_get_by_name(struct udevice *dev, const char *name, + struct dma *dma) +{ + return -ENOSYS; +} +#endif + +/** + * dma_request - Request a DMA by provider-specific ID. + * + * This requests a DMA using a provider-specific ID. Generally, this function + * should not be used, since dma_get_by_index/name() provide an interface that + * better separates clients from intimate knowledge of DMA providers. + * However, this function may be useful in core SoC-specific code. + * + * @dev: The DMA provider device. + * @dma: A pointer to a DMA struct to initialize. The caller must + * have already initialized any field in this struct which the + * DMA provider uses to identify the DMA channel. + * @return 0 if OK, or a negative error code. + */ +int dma_request(struct udevice *dev, struct dma *dma); + +/** + * dma_free - Free a previously requested DMA. + * + * @dma: A DMA struct that was previously successfully requested by + * dma_request/get_by_*(). + * @return 0 if OK, or a negative error code. + */ +int dma_free(struct dma *dma); + +/** + * dma_enable() - Enable (turn on) a DMA channel. + * + * @dma: A DMA struct that was previously successfully requested by + * dma_request/get_by_*(). + * @return zero on success, or -ve error code. + */ +int dma_enable(struct dma *dma); + +/** + * dma_disable() - Disable (turn off) a DMA channel. + * + * @dma: A DMA struct that was previously successfully requested by + * dma_request/get_by_*(). + * @return zero on success, or -ve error code. + */ +int dma_disable(struct dma *dma); + +/** + * dma_memcpy() - Try to use DMA to do a mem copy which will be much faster + * than CPU mem copy. + * + * @dma: A DMA struct that was previously successfully requested by + * dma_request/get_by_*(). + * @dst: The destination pointer. + * @src: The source pointer. + * @len: Length of the data to be copied. + * @return zero on success, or -ve error code. + */ +int dma_memcpy(struct dma *dma, void *dst, void *src, size_t len); + +/** + * dma_receive() - Receive a DMA transfer. + * + * @dma: A DMA struct that was previously successfully requested by + * dma_request/get_by_*(). + * @dst: The destination pointer. + * @return zero on success, or -ve error code. + */ +int dma_receive(struct dma *dma, void **dst); + +/** + * dma_send() - Send a DMA transfer. + * + * @dma: A DMA struct that was previously successfully requested by + * dma_request/get_by_*(). + * @src: The source pointer. + * @len: Length of the data to be copied. + * @return zero on success, or -ve error code. */ -int dma_memcpy(void *dst, void *src, size_t len); +int dma_send(struct dma *dma, void *src, size_t len); -#endif /* _DMA_H_ */ +#endif /* _DMA_H_ */ diff --git a/include/spi_flash.h b/include/spi_flash.h index f3c4e83424..f31e8b8145 100644 --- a/include/spi_flash.h +++ b/include/spi_flash.h @@ -65,6 +65,9 @@ struct spi_flash { #ifdef CONFIG_DM_SPI_FLASH struct udevice *dev; #endif +#ifdef CONFIG_DMA + struct dma *dma; +#endif const char *name; u8 dual_flash; u8 shift; From patchwork Mon Feb 12 16:38:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 872148 X-Patchwork-Delegate: daniel.schwierzeck@googlemail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Fm/Y53du"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zgBKq2t90z9sRW for ; Tue, 13 Feb 2018 03:42:39 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 15CB6C21F18; Mon, 12 Feb 2018 16:40:20 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 872C6C21EBF; Mon, 12 Feb 2018 16:39:10 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 89A3BC21E76; Mon, 12 Feb 2018 16:39:04 +0000 (UTC) Received: from mail-wm0-f67.google.com (mail-wm0-f67.google.com [74.125.82.67]) by lists.denx.de (Postfix) with ESMTPS id D4129C21D8A for ; Mon, 12 Feb 2018 16:39:03 +0000 (UTC) Received: by mail-wm0-f67.google.com with SMTP id v71so11106818wmv.2 for ; Mon, 12 Feb 2018 08:39:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GUEEMPLJ9LrQI9S5350rAxQYPbVYL4jpgR4CjsZFKqA=; b=Fm/Y53duxt5FD5B8pGdeNiuPzqmzyBvkE/OhOBq7+VJSLho5fwMkQuCNYW2nTzcOwd depu+uOFkjXpDfwrikEJX9n9YAa7CPSWVe55mJT2oDWRSdrYtkDwHq6AACPw56uNhf2I xvKEZeNd7n208n2AVFBttAQ63VLArvTN+ctjVphP7owk9G1ZpYr/JNqh6FDParfcqNBG 2eqQZCU7fqPNJJoaPsW2C7nJ4+pwd5lvpUAfy3HPdMSbNB9sqJsSe+uldbI94tITAMr4 JTCnk7gIvjY8oU62kF3XGdZeTIm7OR2mqeqAqeqktwvavIUqWtOijKInmUfu1WtWkna3 JJhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GUEEMPLJ9LrQI9S5350rAxQYPbVYL4jpgR4CjsZFKqA=; b=rbI/K7MKhQNouqxf5EPY3RRw6bb96gBGLFswIdJarQMdnLn8ydUukPY/B1TTYiQn4T CMxDbh107GcNb4JfS4JgmE7t4khYdefjshBJ36TnQbqEiFDvT2rsmLpZJj+nPE7V7cOy Gh/SP3Vp9WSTGKkkLdKzME0EdGWSdOro4VCZSav1daxBOOWtCYzEGrJr+ia+lgUmBERM cWypllMvPuBXjZklXd+QiE95MJQ5sp7UI64oAicnOfxzCDkqbu1DwQ+3L17d2L2iIybn wBAuw3z3c6NAL2wRZfKcJsuNToW45c+Yz1T6FedwF89PXaVUQyOlZKQ8jW/jbeaRbC0v N0pg== X-Gm-Message-State: APf1xPC3BnVk9DmxLQElMonmjmk/u+u08vnzdf6k9j2O7gyqXyJOTfkH ybXqP3wLOgiOTXMdFlQuadDwH+sj X-Google-Smtp-Source: AH8x224d6lm7c5/ma/8ydPp3HsTInPnsYusN9jlhhvHVS1+Rnwvr+THz6NujPpyi7pxReSAy9GtoZA== X-Received: by 10.28.125.19 with SMTP id y19mr3788505wmc.101.1518453542938; Mon, 12 Feb 2018 08:39:02 -0800 (PST) Received: from skynet.lan (175.red-2-137-31.dynamicip.rima-tde.net. [2.137.31.175]) by smtp.gmail.com with ESMTPSA id j144sm5750202wmj.45.2018.02.12.08.39.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Feb 2018 08:39:02 -0800 (PST) From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= To: u-boot@lists.denx.de, sjg@chromium.org, daniel.schwierzeck@gmail.com, mugunthanvnm@ti.com, jteki@openedev.com Date: Mon, 12 Feb 2018 17:38:46 +0100 Message-Id: <20180212163858.25601-3-noltari@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180212163858.25601-1-noltari@gmail.com> References: <20180212163858.25601-1-noltari@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [RFC 02/14] dma: add bcm6348-iudma support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Signed-off-by: Álvaro Fernández Rojas --- drivers/dma/Kconfig | 8 + drivers/dma/Makefile | 1 + drivers/dma/bcm6348-iudma.c | 498 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 507 insertions(+) create mode 100644 drivers/dma/bcm6348-iudma.c diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig index 1b92c7789d..f58323f6c0 100644 --- a/drivers/dma/Kconfig +++ b/drivers/dma/Kconfig @@ -12,6 +12,14 @@ config DMA buses that is used to transfer data to and from memory. The uclass interface is defined in include/dma.h. +config BCM6348_IUDMA + bool "BCM6348 IUDMA driver" + depends on ARCH_BMIPS + help + Enable the BCM6348 IUDMA driver. + This driver support data transfer from devices to + memory and from memory to devices. + config TI_EDMA3 bool "TI EDMA3 driver" help diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile index 39b78b2a3d..b2b4147349 100644 --- a/drivers/dma/Makefile +++ b/drivers/dma/Makefile @@ -9,6 +9,7 @@ obj-$(CONFIG_DMA) += dma-uclass.o obj-$(CONFIG_FSLDMAFEC) += MCD_tasksInit.o MCD_dmaApi.o MCD_tasks.o obj-$(CONFIG_APBH_DMA) += apbh_dma.o +obj-$(CONFIG_BCM6348_IUDMA) += bcm6348-iudma.o obj-$(CONFIG_FSL_DMA) += fsl_dma.o obj-$(CONFIG_TI_KSNAV) += keystone_nav.o keystone_nav_cfg.o obj-$(CONFIG_TI_EDMA3) += ti-edma3.o diff --git a/drivers/dma/bcm6348-iudma.c b/drivers/dma/bcm6348-iudma.c new file mode 100644 index 0000000000..22d81cc990 --- /dev/null +++ b/drivers/dma/bcm6348-iudma.c @@ -0,0 +1,498 @@ +/* + * Copyright (C) 2018 Álvaro Fernández Rojas + * + * Derived from linux/drivers/dma/bcm63xx-iudma.c: + * Copyright (C) 2015 Simon Arlott + * + * Derived from linux/drivers/net/ethernet/broadcom/bcm63xx_enet.c: + * Copyright (C) 2008 Maxime Bizon + * + * Derived from bcm963xx_4.12L.06B_consumer/shared/opensource/include/bcm963xx/63268_map_part.h: + * Copyright (C) 2000-2010 Broadcom Corporation + * + * Derived from bcm963xx_4.12L.06B_consumer/bcmdrivers/opensource/net/enet/impl4/bcmenet.c: + * Copyright (C) 2010 Broadcom Corporation + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +#define ALIGN_END_ADDR(type, ptr, size) \ + ((unsigned long)(ptr) + roundup((size) * sizeof(type), \ + ARCH_DMA_MINALIGN)) + +#define DMA_MAX_BURST_LENGTH 16 + +/* DMA Channels */ +#define DMA_CHAN_FLOWC(x) ((x) >> 1) +#define DMA_CHAN_FLOWC_MAX 8 +#define DMA_CHAN_MAX 16 +#define DMA_CHAN_SIZE 0x10 +#define DMA_CHAN_TOUT 500 + +/* DMA Global Configuration register */ +#define DMA_CFG_REG 0x00 +#define DMA_CFG_ENABLE_SHIFT 0 +#define DMA_CFG_ENABLE_MASK (1 << DMA_CFG_ENABLE_SHIFT) +#define DMA_CFG_FLOWC_ENABLE(x) BIT(DMA_CHAN_FLOWC(x) + 1) +#define DMA_CFG_NCHANS_SHIFT 24 +#define DMA_CFG_NCHANS_MASK (0xf << DMA_CFG_NCHANS_SHIFT) + +/* DMA Global Flow Control Threshold registers */ +#define DMA_FLOWC_THR_LO_REG(x) (0x04 + DMA_CHAN_FLOWC(x) * 0x0c) +#define DMA_FLOWC_THR_LO_SHIFT 0 +#define DMA_FLOWC_THR_LO_MASK (5 << DMA_FLOWC_THR_LO_SHIFT) + +#define DMA_FLOWC_THR_HI_REG(x) (0x08 + DMA_CHAN_FLOWC(x) * 0x0c) +#define DMA_FLOWC_THR_HI_SHIFT 0 +#define DMA_FLOWC_THR_HI_MASK (10 << DMA_FLOWC_THR_HI_SHIFT) + +/* DMA Global Flow Control Buffer Allocation registers */ +#define DMA_FLOWC_ALLOC_REG(x) (0x0c + DMA_CHAN_FLOWC(x) * 0x0c) +#define DMA_FLOWC_ALLOC_FORCE_SHIFT 31 +#define DMA_FLOWC_ALLOC_FORCE_MASK (1 << DMA_FLOWC_ALLOC_FORCE_SHIFT) + +/* DMA Global Reset register */ +#define DMA_RST_REG 0x34 +#define DMA_RST_CHAN_SHIFT 0 +#define DMA_RST_CHAN_MASK(x) (1 << x) + +/* DMA Channel Configuration register */ +#define DMAC_CFG_REG(x) (DMA_CHAN_SIZE * (x) + 0x00) +#define DMAC_CFG_ENABLE_SHIFT 0 +#define DMAC_CFG_ENABLE_MASK (1 << DMAC_CFG_ENABLE_SHIFT) +#define DMAC_CFG_PKT_HALT_SHIFT 1 +#define DMAC_CFG_PKT_HALT_MASK (1 << DMAC_CFG_PKT_HALT_SHIFT) +#define DMAC_CFG_BRST_HALT_SHIFT 2 +#define DMAC_CFG_BRST_HALT_MASK (1 << DMAC_CFG_BRST_HALT_SHIFT) + +/* DMA Channel Interrupts registers */ +#define DMAC_IR_ST_REG(x) (DMA_CHAN_SIZE * (x) + 0x04) +#define DMAC_IR_EN_REG(x) (DMA_CHAN_SIZE * (x) + 0x08) + +#define DMAC_IR_DONE_SHIFT 2 +#define DMAC_IR_DONE_MASK (1 << DMAC_IR_DONE_SHIFT) + +/* DMA Channel Max Burst Length register */ +#define DMAC_BURST_REG(x) (DMA_CHAN_SIZE * (x) + 0x0c) +#define DMAC_BURST_MAX_SHIFT 0 +#define DMAC_BURST_MAX_MASK (16 << DMAC_BURST_MAX_SHIFT) + +/* DMA SRAM Descriptor Ring Start register */ +#define DMAS_RSTART_REG(x) (DMA_CHAN_SIZE * (x) + 0x00) + +/* DMA SRAM State/Bytes done/ring offset register */ +#define DMAS_STATE_DATA_REG(x) (DMA_CHAN_SIZE * (x) + 0x04) + +/* DMA SRAM Buffer Descriptor status and length register */ +#define DMAS_DESC_LEN_STATUS_REG(x) (DMA_CHAN_SIZE * (x) + 0x08) + +/* DMA SRAM Buffer Descriptor status and length register */ +#define DMAS_DESC_BASE_BUFPTR_REG(x) (DMA_CHAN_SIZE * (x) + 0x0c) + +struct bcm6348_dma_desc { + uint16_t length; + + uint16_t status; +#define DMAD_ST_CRC_SHIFT 8 +#define DMAD_ST_CRC_MASK (1 << DMAD_ST_CRC_SHIFT) +#define DMAD_ST_WRAP_SHIFT 12 +#define DMAD_ST_WRAP_MASK (1 << DMAD_ST_WRAP_SHIFT) +#define DMAD_ST_SOP_SHIFT 13 +#define DMAD_ST_SOP_MASK (1 << DMAD_ST_SOP_SHIFT) +#define DMAD_ST_EOP_SHIFT 14 +#define DMAD_ST_EOP_MASK (1 << DMAD_ST_EOP_SHIFT) +#define DMAD_ST_OWN_SHIFT 15 +#define DMAD_ST_OWN_MASK (1 << DMAD_ST_OWN_SHIFT) + + uint32_t address; +} __attribute__((aligned(1))); + +struct bcm6348_chan_priv { + void __iomem *dma_ring; + uint8_t dma_ring_size; + uint8_t desc_id; +}; + +struct bcm6348_iudma_priv { + void __iomem *base; + void __iomem *chan; + void __iomem *sram; + struct bcm6348_chan_priv **ch_priv; + uint8_t n_channels; +}; + +static bool bcm6348_iudma_chan_is_rx(uint8_t ch) +{ + return !(ch & 1); +} + +static void bcm6348_iudma_chan_stop(struct bcm6348_iudma_priv *priv, + uint8_t ch) +{ + unsigned int timeout = DMA_CHAN_TOUT; + + /* disable dma channel interrupts */ + writel_be(0, priv->chan + DMAC_IR_EN_REG(ch)); + + do { + uint32_t cfg, halt; + + if (timeout > DMA_CHAN_TOUT / 2) + halt = DMAC_CFG_PKT_HALT_MASK; + else + halt = DMAC_CFG_BRST_HALT_MASK; + + /* try to stop dma channel */ + writel_be(halt, priv->chan + DMAC_CFG_REG(ch)); + mb(); + + /* check if channel was stopped */ + cfg = readl_be(priv->chan + DMAC_CFG_REG(ch)); + if (!(cfg & DMAC_CFG_ENABLE_MASK)) + break; + + udelay(1); + } while (--timeout); + + if (!timeout) + pr_err("unable to stop channel %u\n", ch); + + /* reset dma channel */ + setbits_be32(priv->base + DMA_RST_REG, DMA_RST_CHAN_MASK(ch)); + clrbits_be32(priv->base + DMA_RST_REG, DMA_RST_CHAN_MASK(ch)); +} + +static int bcm6348_iudma_disable(struct dma *dma) +{ + struct bcm6348_iudma_priv *priv = dev_get_priv(dma->dev); + + bcm6348_iudma_chan_stop(priv, dma->id); + + if (bcm6348_iudma_chan_is_rx(dma->id)) + writel_be(DMA_FLOWC_ALLOC_FORCE_MASK, + DMA_FLOWC_ALLOC_REG(dma->id)); + + return 0; +} + +static int bcm6348_iudma_enable(struct dma *dma) +{ + struct bcm6348_iudma_priv *priv = dev_get_priv(dma->dev); + struct bcm6348_chan_priv *ch_priv = priv->ch_priv[dma->id]; + struct bcm6348_dma_desc *dma_desc; + uint8_t i; + + /* init dma rings */ + dma_desc = ch_priv->dma_ring; + for (i = 0; i < ch_priv->dma_ring_size; i++) { + if (bcm6348_iudma_chan_is_rx(dma->id)) { + dma_desc->status = DMAD_ST_OWN_MASK; + dma_desc->length = PKTSIZE_ALIGN; + dma_desc->address = virt_to_phys(net_rx_packets[i]); + } else { + dma_desc->status = 0; + dma_desc->length = 0; + dma_desc->address = 0; + } + + if (i == ch_priv->dma_ring_size - 1) + dma_desc->status |= DMAD_ST_WRAP_MASK; + + if (bcm6348_iudma_chan_is_rx(dma->id)) + writel_be(1, + priv->base + DMA_FLOWC_ALLOC_REG(dma->id)); + + dma_desc++; + } + + /* init to first descriptor */ + ch_priv->desc_id = 0; + + /* force cache writeback */ + flush_dcache_range((ulong)ch_priv->dma_ring, + ALIGN_END_ADDR(struct bcm6348_dma_desc, ch_priv->dma_ring, + ch_priv->dma_ring_size)); + + /* clear sram */ + writel_be(0, priv->sram + DMAS_STATE_DATA_REG(dma->id)); + writel_be(0, priv->sram + DMAS_DESC_LEN_STATUS_REG(dma->id)); + writel_be(0, priv->sram + DMAS_DESC_BASE_BUFPTR_REG(dma->id)); + + /* set dma ring start */ + writel_be(virt_to_phys(ch_priv->dma_ring), + priv->sram + DMAS_RSTART_REG(dma->id)); + + /* set flow control */ + if (bcm6348_iudma_chan_is_rx(dma->id)) { + setbits_be32(priv->base + DMA_CFG_REG, + DMA_CFG_FLOWC_ENABLE(dma->id)); + writel_be(DMA_FLOWC_THR_LO_MASK, + priv->base + DMA_FLOWC_THR_LO_REG(dma->id)); + writel_be(DMA_FLOWC_THR_HI_MASK, + priv->base + DMA_FLOWC_THR_HI_REG(dma->id)); + } + + /* set dma max burst */ + writel_be(DMA_MAX_BURST_LENGTH, priv->chan + DMAC_BURST_REG(dma->id)); + + /* clear interrupts */ + writel_be(DMAC_IR_DONE_MASK, priv->chan + DMAC_IR_ST_REG(dma->id)); + writel_be(0, priv->chan + DMAC_IR_EN_REG(dma->id)); + + setbits_be32(priv->chan + DMAC_CFG_REG(dma->id), DMAC_CFG_ENABLE_MASK); + + return 0; +} + +static int bcm6348_iudma_request(struct dma *dma) +{ + struct bcm6348_iudma_priv *priv = dev_get_priv(dma->dev); + struct bcm6348_chan_priv *ch_priv; + + /* check if channel is valid */ + if (dma->id >= priv->n_channels) + return -ENODEV; + + /* alloc channel private data */ + priv->ch_priv[dma->id] = calloc(1, sizeof(struct bcm6348_chan_priv)); + if (!priv->ch_priv[dma->id]) + return -ENOMEM; + ch_priv = priv->ch_priv[dma->id]; + + /* alloc dma ring */ + if (bcm6348_iudma_chan_is_rx(dma->id)) + ch_priv->dma_ring_size = PKTBUFSRX; + else + ch_priv->dma_ring_size = 1; + ch_priv->dma_ring = + malloc_cache_aligned(sizeof(struct bcm6348_dma_desc) * + ch_priv->dma_ring_size); + if (!ch_priv->dma_ring) + return -ENOMEM; + + return 0; +} + +static int bcm6348_iudma_receive(struct dma *dma, void **dst) +{ + struct bcm6348_iudma_priv *priv = dev_get_priv(dma->dev); + struct bcm6348_chan_priv *ch_priv = priv->ch_priv[dma->id]; + struct bcm6348_dma_desc *dma_desc; + void __iomem *dma_buff; + uint16_t status; + int ret; + + /* get dma ring descriptor address */ + dma_desc = ch_priv->dma_ring; + dma_desc += ch_priv->desc_id; + + /* invalidate cache data */ + invalidate_dcache_range((ulong)dma_desc, + ALIGN_END_ADDR(struct bcm6348_dma_desc, dma_desc, 1)); + + /* check dma own */ + if (dma_desc->status & DMAD_ST_OWN_MASK) + return 0; + + /* check dma end */ + if (!(dma_desc->status & DMAD_ST_EOP_MASK)) + return -EINVAL; + + /* get dma buff descriptor address */ + dma_buff = phys_to_virt(dma_desc->address); + + /* invalidate cache data */ + invalidate_dcache_range((ulong)dma_buff, + (ulong)(dma_buff + PKTSIZE_ALIGN)); + + /* get dma data */ + *dst = dma_buff; + ret = dma_desc->length; + + /* reinit dma descriptor */ + status = dma_desc->status & DMAD_ST_WRAP_MASK; + status |= DMAD_ST_OWN_MASK; + + dma_desc->length = PKTSIZE_ALIGN; + dma_desc->status = status; + + /* flush cache */ + flush_dcache_range((ulong)dma_desc, + ALIGN_END_ADDR(struct bcm6348_dma_desc, dma_desc, 1)); + + /* set flow control buffer alloc */ + writel_be(1, priv->base + DMA_FLOWC_ALLOC_REG(dma->id)); + + /* enable dma */ + setbits_be32(priv->chan + DMAC_CFG_REG(dma->id), DMAC_CFG_ENABLE_MASK); + + /* set interrupt */ + writel_be(DMAC_IR_DONE_MASK, priv->chan + DMAC_IR_EN_REG(dma->id)); + + /* increment dma descriptor */ + ch_priv->desc_id = (ch_priv->desc_id + 1) % ch_priv->dma_ring_size; + + return ret - 4; +} + +static int bcm6348_iudma_send(struct dma *dma, void *src, size_t len) +{ + struct bcm6348_iudma_priv *priv = dev_get_priv(dma->dev); + struct bcm6348_chan_priv *ch_priv = priv->ch_priv[dma->id]; + struct bcm6348_dma_desc *dma_desc; + uint16_t val; + + /* get dma ring descriptor address */ + dma_desc = ch_priv->dma_ring; + dma_desc += ch_priv->desc_id; + + dma_desc->address = virt_to_phys(src); + + /* config dma descriptor */ + val = (DMAD_ST_OWN_MASK | + DMAD_ST_EOP_MASK | + DMAD_ST_CRC_MASK | + DMAD_ST_SOP_MASK); + if (ch_priv->desc_id == ch_priv->dma_ring_size - 1) + val |= DMAD_ST_WRAP_MASK; + + dma_desc->length = len; + dma_desc->status = val; + + /* flush cache */ + flush_dcache_range((ulong)src, (ulong)src + PKTSIZE_ALIGN); + + /* flush cache */ + flush_dcache_range((ulong)dma_desc, + ALIGN_END_ADDR(struct bcm6348_dma_desc, dma_desc, 1)); + + /* enable dma */ + setbits_be32(priv->chan + DMAC_CFG_REG(dma->id), DMAC_CFG_ENABLE_MASK); + + /* set interrupt */ + writel_be(DMAC_IR_DONE_MASK, priv->chan + DMAC_IR_EN_REG(dma->id)); + + /* poll dma status */ + do { + /* invalidate cache */ + invalidate_dcache_range((ulong)dma_desc, + ALIGN_END_ADDR(struct bcm6348_dma_desc, dma_desc, 1)); + + if (!(dma_desc->status & DMAD_ST_OWN_MASK)) + break; + } while(1); + + /* increment dma descriptor */ + ch_priv->desc_id = (ch_priv->desc_id + 1) % ch_priv->dma_ring_size; + + return 0; +} + +static const struct dma_ops bcm6348_iudma_ops = { + .disable = bcm6348_iudma_disable, + .enable = bcm6348_iudma_enable, + .request = bcm6348_iudma_request, + .receive = bcm6348_iudma_receive, + .send = bcm6348_iudma_send, +}; + +static const struct udevice_id bcm6348_iudma_ids[] = { + { .compatible = "brcm,bcm6348-iudma", }, + { /* sentinel */ } +}; + +static int bcm6348_iudma_probe(struct udevice *dev) +{ + struct bcm6348_iudma_priv *priv = dev_get_priv(dev); + fdt_addr_t addr; + uint8_t ch; + int i; + + /* try to enable clocks */ + for (i = 0; ; i++) { + struct clk clk; + int ret; + + ret = clk_get_by_index(dev, i, &clk); + if (ret < 0) + break; + if (clk_enable(&clk)) + pr_err("failed to enable clock %d\n", i); + clk_free(&clk); + } + + /* try to perform resets */ + for (i = 0; ; i++) { + struct reset_ctl reset; + int ret; + + ret = reset_get_by_index(dev, i, &reset); + if (ret < 0) + break; + if (reset_deassert(&reset)) + pr_err("failed to deassert reset %d\n", i); + reset_free(&reset); + } + + /* dma global base address */ + addr = devfdt_get_addr_name(dev, "dma"); + if (addr == FDT_ADDR_T_NONE) + return -EINVAL; + priv->base = ioremap(addr, 0); + + /* dma channels base address */ + addr = devfdt_get_addr_name(dev, "dma-channels"); + if (addr == FDT_ADDR_T_NONE) + return -EINVAL; + priv->chan = ioremap(addr, 0); + + /* dma sram base address */ + addr = devfdt_get_addr_name(dev, "dma-sram"); + if (addr == FDT_ADDR_T_NONE) + return -EINVAL; + priv->sram = ioremap(addr, 0); + + /* disable dma controller */ + clrbits_be32(priv->base + DMA_CFG_REG, DMA_CFG_ENABLE_MASK); + + /* get number of channels */ + priv->n_channels = fdtdec_get_uint(gd->fdt_blob, dev_of_offset(dev), + "dma-channels", 8); + if (priv->n_channels > DMA_CHAN_MAX) + return -EINVAL; + + /* alloc channel private data pointers */ + priv->ch_priv = calloc(priv->n_channels, + sizeof(struct bcm6348_chan_priv*)); + if (!priv->ch_priv) + return -ENOMEM; + + /* stop dma channels */ + for (ch = 0; ch < priv->n_channels; ch++) + bcm6348_iudma_chan_stop(priv, ch); + + /* enable dma controller */ + setbits_be32(priv->base + DMA_CFG_REG, DMA_CFG_ENABLE_MASK); + + return 0; +} + +U_BOOT_DRIVER(bcm6348_iudma) = { + .name = "bcm6348_iudma", + .id = UCLASS_DMA, + .of_match = bcm6348_iudma_ids, + .ops = &bcm6348_iudma_ops, + .priv_auto_alloc_size = sizeof(struct bcm6348_iudma_priv), + .probe = bcm6348_iudma_probe, +}; From patchwork Mon Feb 12 16:38:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 872151 X-Patchwork-Delegate: daniel.schwierzeck@googlemail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Qyc8kgY8"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zgBLd022qz9sRW for ; Tue, 13 Feb 2018 03:43:20 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id A49FBC21EDC; Mon, 12 Feb 2018 16:41:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 04BD1C21F13; Mon, 12 Feb 2018 16:39:49 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 0958CC21EE3; Mon, 12 Feb 2018 16:39:08 +0000 (UTC) Received: from mail-wr0-f195.google.com (mail-wr0-f195.google.com [209.85.128.195]) by lists.denx.de (Postfix) with ESMTPS id CD22BC21E65 for ; Mon, 12 Feb 2018 16:39:04 +0000 (UTC) Received: by mail-wr0-f195.google.com with SMTP id t94so15833639wrc.5 for ; Mon, 12 Feb 2018 08:39:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+Hshhl4+92XlruKP8ng8NtSbpjpwRxZVXtbyqhcz8FE=; b=Qyc8kgY8LEr5E6zZErfIJ6p6TnOuilSzole1SVWuqX9zK4zLEJ1uRc+1rov7bSzc84 0wGZzKW8koGmOsA+H7GOwUsR1zVMsXeXb+97fGlhXMugLDrdoNBa11xHZz3P7bH2pl92 shrcv2Cftw027zPPVwwHXzb9VH9KsitoPdsLn/MP4QHl3Cbk1pFV/Y0fg8eqK1bcb5P8 MjOPxHre6rxgBoULfAIU9I8uYtb+c2C8E7r7PmQrRzgZImfquziBPo9SojlnNZdkHdVm IpheSxY+nqcwmlM9FXOuCqNTObWAp97pZ1zuBsLtA9yK3oJFF1MdNDX2curv5uF0LMZx +QSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+Hshhl4+92XlruKP8ng8NtSbpjpwRxZVXtbyqhcz8FE=; b=lCzKGeXev6+nHEPSv7Q0LO6xYxk19cOOVv1i9EU9sjsdYOmlVGF/vCq3w1sf67hWqS HaSOTbx8Kc+PJzLfR29kA7dMLVe5nBjIfD/slZIkCOd7BFMvGsQ8spT1kPSy9Xhs+ggE wjWftGgyJlaLqURHfvEdHdiJ00JrK/zn59nFhCpOWTgol8YGj/vIA3UQSQNcLJM8FQtN QNGv6gokDE4IeNxH8+rStGlMl/KrSclD1tRwTJPqNeFFJDeEIg5T7KA7/NSB5qk6VxG1 jTF70FGV2jARk4nshRG4KHvqyTyl5Cfn+OHq3ueUKC4z9/TOqRz4a+6RDHdSNTVQxtxK 7VUQ== X-Gm-Message-State: APf1xPBMRLVw6jCcoiSp2/s3IGX+riVYVsygWzfOlMkHCDLlBjaIENFD xor/bh+bvnsV5txSWg87TvKhKkPJ X-Google-Smtp-Source: AH8x225uFoYuH8qVKZczr9MPJAhRx+IxtBNlKtyAkNqnxBPyHO9Eg+xU8fNRL+weWEhwNqs13dIkVA== X-Received: by 10.223.133.70 with SMTP id 64mr9234195wrh.219.1518453544037; Mon, 12 Feb 2018 08:39:04 -0800 (PST) Received: from skynet.lan (175.red-2-137-31.dynamicip.rima-tde.net. [2.137.31.175]) by smtp.gmail.com with ESMTPSA id j144sm5750202wmj.45.2018.02.12.08.39.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Feb 2018 08:39:03 -0800 (PST) From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= To: u-boot@lists.denx.de, sjg@chromium.org, daniel.schwierzeck@gmail.com, mugunthanvnm@ti.com, jteki@openedev.com Date: Mon, 12 Feb 2018 17:38:47 +0100 Message-Id: <20180212163858.25601-4-noltari@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180212163858.25601-1-noltari@gmail.com> References: <20180212163858.25601-1-noltari@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [RFC 03/14] bmips: bcm6338: add bcm6348-iudma support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Signed-off-by: Álvaro Fernández Rojas --- arch/mips/dts/brcm,bcm6338.dtsi | 14 ++++++++++++++ include/dt-bindings/dma/bcm6338-dma.h | 15 +++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 include/dt-bindings/dma/bcm6338-dma.h diff --git a/arch/mips/dts/brcm,bcm6338.dtsi b/arch/mips/dts/brcm,bcm6338.dtsi index 0cab44cb8d..4125f71d9f 100644 --- a/arch/mips/dts/brcm,bcm6338.dtsi +++ b/arch/mips/dts/brcm,bcm6338.dtsi @@ -5,6 +5,7 @@ */ #include +#include #include #include #include "skeleton.dtsi" @@ -131,5 +132,18 @@ reg = <0xfffe3100 0x38>; u-boot,dm-pre-reloc; }; + + iudma: dma-controller@fffe2400 { + compatible = "brcm,bcm6348-iudma"; + reg = <0xfffe2400 0x1c>, + <0xfffe2500 0x60>, + <0xfffe2600 0x60>; + reg-names = "dma", + "dma-channels", + "dma-sram"; + #dma-cells = <1>; + dma-channels = <6>; + resets = <&periph_rst BCM6338_RST_DMAMEM>; + }; }; }; diff --git a/include/dt-bindings/dma/bcm6338-dma.h b/include/dt-bindings/dma/bcm6338-dma.h new file mode 100644 index 0000000000..5dd66239b4 --- /dev/null +++ b/include/dt-bindings/dma/bcm6338-dma.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2018 Álvaro Fernández Rojas + * + * Derived from linux/drivers/net/ethernet/broadcom/bcm63xx_enet.c + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef __DT_BINDINGS_DMA_BCM6338_H +#define __DT_BINDINGS_DMA_BCM6338_H + +#define BCM6338_DMA_ENET_RX 0 +#define BCM6338_DMA_ENET_TX 1 + +#endif /* __DT_BINDINGS_DMA_BCM6338_H */ From patchwork Mon Feb 12 16:38:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 872159 X-Patchwork-Delegate: daniel.schwierzeck@googlemail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Qt7NxWfi"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zgBSb3sgCz9sRW for ; Tue, 13 Feb 2018 03:48:31 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 3B68BC21F13; Mon, 12 Feb 2018 16:42:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 5C403C21F24; Mon, 12 Feb 2018 16:39:55 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 331FEC21E16; Mon, 12 Feb 2018 16:39:09 +0000 (UTC) Received: from mail-wr0-f194.google.com (mail-wr0-f194.google.com [209.85.128.194]) by lists.denx.de (Postfix) with ESMTPS id 345ECC21C51 for ; Mon, 12 Feb 2018 16:39:07 +0000 (UTC) Received: by mail-wr0-f194.google.com with SMTP id s5so15871894wra.0 for ; Mon, 12 Feb 2018 08:39:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=XVpSDZFLI2cmpuPoVMiiNUXYsyldCC1k32g5z5Q1pto=; b=Qt7NxWfiPuyENJcft2q4r38/NQYrxHRMpo2SZhQMVwEmUTq4PZBBp6a+OqyNaRX/8V VnxDOlT9P5yYQdsnJRfBVOaSYFyHNeH35zAzVbJLMj+AjnGs8WcqlPJn0c2ge/HUDaKC 4sbZQoVcuN2+zU5qSmT1MyQfNK/RXh3cXDXtvOdiUUGSTPtx5u8U6F+6ONf7OYCpeXZ6 rlqJit0l16aMxQRL08z6GYmmoyf1qBwhWFH6Pc9nVlMx/ZAYKBlwz9rQflR/mhUVM+5E dqdbh2KfbmZgVNnJd1Nwoe2XxbC4xQ5GbpOgXEXG61/cfsFgG2mNgmP/+N5o2/djTdbR a12w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=XVpSDZFLI2cmpuPoVMiiNUXYsyldCC1k32g5z5Q1pto=; b=JNAXrb42cC3QFKevRkd0jTGGtzHJoook0pzKB5H/6B2D1eb4zM1nJNYlzwVShSAceT Wpa/2be4xvLoMvnjk6Sg4t3ur7ZQlsMBgoPICqhEHPZEDRNZ4BJaogMmUFpTZRbAnMKG lfrsDXUCKrOP7ty0bE3GpwnH86Yu9Xvd9ISQrhcGl6v98lgV2mWwskmxddnU5TimTvx8 JYR0GVz7hDtT3/uMHm2M9dQXSg1st59a2BAAMg/COqHkLRm0GGch70BhBkMX0Fb8ysYD ElOtw28X7PmbWop+XbwIO2jbYKlwUlmOBeds/J/eiRUAXmddFIjS+0Wffs3bXMvzToei Tzkw== X-Gm-Message-State: APf1xPD7bi6zNcIIFWFwf82CHOg0PDQUKaOCNG+KQCkTSNqZRibvny0/ rSSF5z/BVTnaueIssZzFEOboV5Ob X-Google-Smtp-Source: AH8x227FsZXDryWFt0RPpjwEirqa3N0liEUldknF/X5wdvJcw9oE+5y5SMQeveaFspj55Y+hCuDHAQ== X-Received: by 10.223.160.27 with SMTP id k27mr10290213wrk.5.1518453545861; Mon, 12 Feb 2018 08:39:05 -0800 (PST) Received: from skynet.lan (175.red-2-137-31.dynamicip.rima-tde.net. [2.137.31.175]) by smtp.gmail.com with ESMTPSA id j144sm5750202wmj.45.2018.02.12.08.39.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Feb 2018 08:39:04 -0800 (PST) From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= To: u-boot@lists.denx.de, sjg@chromium.org, daniel.schwierzeck@gmail.com, mugunthanvnm@ti.com, jteki@openedev.com Date: Mon, 12 Feb 2018 17:38:48 +0100 Message-Id: <20180212163858.25601-5-noltari@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180212163858.25601-1-noltari@gmail.com> References: <20180212163858.25601-1-noltari@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [RFC 04/14] bmips: bcm6348: add bcm6348-iudma support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Signed-off-by: Álvaro Fernández Rojas --- arch/mips/dts/brcm,bcm6348.dtsi | 16 ++++++++++++++++ include/dt-bindings/dma/bcm6348-dma.h | 17 +++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 include/dt-bindings/dma/bcm6348-dma.h diff --git a/arch/mips/dts/brcm,bcm6348.dtsi b/arch/mips/dts/brcm,bcm6348.dtsi index 92fb91afc1..d774c59665 100644 --- a/arch/mips/dts/brcm,bcm6348.dtsi +++ b/arch/mips/dts/brcm,bcm6348.dtsi @@ -5,6 +5,7 @@ */ #include +#include #include #include #include "skeleton.dtsi" @@ -160,5 +161,20 @@ reg = <0xfffe2300 0x38>; u-boot,dm-pre-reloc; }; + + iudma: dma-controller@fffe7000 { + compatible = "brcm,bcm6348-iudma"; + reg = <0xfffe7000 0x1c>, + <0xfffe7100 0x40>, + <0xfffe7200 0x40>; + reg-names = "dma", + "dma-channels", + "dma-sram"; + #dma-cells = <1>; + dma-channels = <4>; + clocks = <&periph_clk BCM6348_CLK_ENET>; + resets = <&periph_rst BCM6348_RST_ENET>, + <&periph_rst BCM6348_RST_DMAMEM>; + }; }; }; diff --git a/include/dt-bindings/dma/bcm6348-dma.h b/include/dt-bindings/dma/bcm6348-dma.h new file mode 100644 index 0000000000..a1d3a6456d --- /dev/null +++ b/include/dt-bindings/dma/bcm6348-dma.h @@ -0,0 +1,17 @@ +/* + * Copyright (C) 2018 Álvaro Fernández Rojas + * + * Derived from linux/drivers/net/ethernet/broadcom/bcm63xx_enet.c + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef __DT_BINDINGS_DMA_BCM6348_H +#define __DT_BINDINGS_DMA_BCM6348_H + +#define BCM6348_DMA_ENET0_RX 0 +#define BCM6348_DMA_ENET0_TX 1 +#define BCM6348_DMA_ENET1_RX 2 +#define BCM6348_DMA_ENET1_TX 3 + +#endif /* __DT_BINDINGS_DMA_BCM6348_H */ From patchwork Mon Feb 12 16:38:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 872158 X-Patchwork-Delegate: daniel.schwierzeck@googlemail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="YwvpnfD7"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zgBS65lZTz9sRW for ; Tue, 13 Feb 2018 03:48:06 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 752C9C21F06; Mon, 12 Feb 2018 16:43:19 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 901CBC21F3E; Mon, 12 Feb 2018 16:40:01 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 67027C21F19; Mon, 12 Feb 2018 16:39:10 +0000 (UTC) Received: from mail-wr0-f195.google.com (mail-wr0-f195.google.com [209.85.128.195]) by lists.denx.de (Postfix) with ESMTPS id 7AD2BC21D8A for ; Mon, 12 Feb 2018 16:39:07 +0000 (UTC) Received: by mail-wr0-f195.google.com with SMTP id v65so9052924wrc.11 for ; Mon, 12 Feb 2018 08:39:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=uQrXlnGtRLMumMcyChzbIk4T11Jo6d06tuJnnUCRSDs=; b=YwvpnfD7dZtkKjNu792FCuHi+vrpkP1CF91Grf+PcW+D5l7xOtLoxmgOuYScpVTfHc zzl+cuDgUWEn18UeLYKLKj9wW4X0ExGWWZmqvvX2Ar4t5sapgNDPQSlFdO3vsShPR0hO peZw0OQ6cpBFB3k6iYJfc6mxYxnayuP9VnxrVVxWNgrwU3Mr9K/cLiby56ZCTdgro0aF TL9BKvul58frfv2FBeakGvld7uJMbBxYIRDK/pC5YRoRjyJ1K4XW2jJYogUXbjJJeccP ESgRJ6bOTW9fBEECDnYs2G/kak0ucARdFY7A9OdgcuFsUWm5r5SLdfHf5bMAWQX5KypS QZ4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=uQrXlnGtRLMumMcyChzbIk4T11Jo6d06tuJnnUCRSDs=; b=pBVYjbiTW5jSN4k3CscW2C1W8syiNxQ8d3au9qtSdfI6FvHgmk+WzLzOpPVdp0BVtJ /apB5xfVg3NIMhrnIO/QFOmKC1EE5w580GtGGv3mK8TNDm/Sf07hCg3sEnFmPhKj3pSj FdEn8k64zdzbZeFYP4AjxYs+ZfgR+1p97uMtEpBSmFBeSA947SuVYyeU2Oq4omUjD686 n5ZTmoeu01fTSeUAgJbl0kDqQLsrqRftLZogDtFqSO+OxRBxN77rBCNqwR3dENPd6RPE JsZxL47Cj4UcwWxCykn3RQnjVPOGLAQjvz0J1mHFU/To3rB2fUbkoBt6f8LLHuLMaHAx uZhg== X-Gm-Message-State: APf1xPCJ5zfVStGn/EjQxXFeWeP+pnxEEOA41S2GbmXN7OA6Zb/rvc7j csAzlE5/OYbEYSV/19L+z6grdbn8 X-Google-Smtp-Source: AH8x226vRrkwyqTSPgzHpKm6/YgCbCkqPxYKVTwycO9XkOkbnqHS3TC3PD63Tqgs7jT4y9CqsBKDAw== X-Received: by 10.223.145.102 with SMTP id j93mr8996184wrj.254.1518453546984; Mon, 12 Feb 2018 08:39:06 -0800 (PST) Received: from skynet.lan (175.red-2-137-31.dynamicip.rima-tde.net. [2.137.31.175]) by smtp.gmail.com with ESMTPSA id j144sm5750202wmj.45.2018.02.12.08.39.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Feb 2018 08:39:06 -0800 (PST) From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= To: u-boot@lists.denx.de, sjg@chromium.org, daniel.schwierzeck@gmail.com, mugunthanvnm@ti.com, jteki@openedev.com Date: Mon, 12 Feb 2018 17:38:49 +0100 Message-Id: <20180212163858.25601-6-noltari@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180212163858.25601-1-noltari@gmail.com> References: <20180212163858.25601-1-noltari@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [RFC 05/14] bmips: bcm6358: add bcm6348-iudma support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Signed-off-by: Álvaro Fernández Rojas --- arch/mips/dts/brcm,bcm6358.dtsi | 18 ++++++++++++++++++ include/dt-bindings/dma/bcm6358-dma.h | 17 +++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 include/dt-bindings/dma/bcm6358-dma.h diff --git a/arch/mips/dts/brcm,bcm6358.dtsi b/arch/mips/dts/brcm,bcm6358.dtsi index b63b53baee..1468e4f63a 100644 --- a/arch/mips/dts/brcm,bcm6358.dtsi +++ b/arch/mips/dts/brcm,bcm6358.dtsi @@ -5,6 +5,7 @@ */ #include +#include #include #include #include "skeleton.dtsi" @@ -191,5 +192,22 @@ status = "disabled"; }; + + iudma: dma-controller@fffe5000 { + compatible = "brcm,bcm6348-iudma"; + reg = <0xfffe5000 0x24>, + <0xfffe5100 0x80>, + <0xfffe5200 0x80>; + reg-names = "dma", + "dma-channels", + "dma-sram"; + #dma-cells = <1>; + dma-channels = <8>; + clocks = <&periph_clk BCM6358_CLK_EMUSB>, + <&periph_clk BCM6358_CLK_USBSU>, + <&periph_clk BCM6358_CLK_EPHY>; + resets = <&periph_rst BCM6358_RST_ENET>, + <&periph_rst BCM6358_RST_EPHY>; + }; }; }; diff --git a/include/dt-bindings/dma/bcm6358-dma.h b/include/dt-bindings/dma/bcm6358-dma.h new file mode 100644 index 0000000000..3b1fcf8540 --- /dev/null +++ b/include/dt-bindings/dma/bcm6358-dma.h @@ -0,0 +1,17 @@ +/* + * Copyright (C) 2018 Álvaro Fernández Rojas + * + * Derived from linux/drivers/net/ethernet/broadcom/bcm63xx_enet.c + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef __DT_BINDINGS_DMA_BCM6358_H +#define __DT_BINDINGS_DMA_BCM6358_H + +#define BCM6358_DMA_ENET0_RX 0 +#define BCM6358_DMA_ENET0_TX 1 +#define BCM6358_DMA_ENET1_RX 2 +#define BCM6358_DMA_ENET1_TX 3 + +#endif /* __DT_BINDINGS_DMA_BCM6358_H */ From patchwork Mon Feb 12 16:38:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 872154 X-Patchwork-Delegate: daniel.schwierzeck@googlemail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ZIoYccyU"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zgBPs2g5Fz9t3C for ; Tue, 13 Feb 2018 03:46:09 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id EC0A7C21E76; Mon, 12 Feb 2018 16:43:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 7B780C21F34; Mon, 12 Feb 2018 16:39:57 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 33603C21E1E; Mon, 12 Feb 2018 16:39:12 +0000 (UTC) Received: from mail-wm0-f66.google.com (mail-wm0-f66.google.com [74.125.82.66]) by lists.denx.de (Postfix) with ESMTPS id A6E08C21EDC for ; Mon, 12 Feb 2018 16:39:08 +0000 (UTC) Received: by mail-wm0-f66.google.com with SMTP id j21so9566512wmh.1 for ; Mon, 12 Feb 2018 08:39:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ci8LFgQ7vUercRuHwdbPm1kJEhWLrkBGjnE054jklvk=; b=ZIoYccyU5oCtjB+mZ6RfVLWr7XBvp/kd6OjMw2VXZyWDZAnY0LnwATbvaFjrwTrhIe r+vPrLa8JjFw8dd6Qxzyz1nktDs3fWPj1k6GBzRHqAzAzFBRit08atIPh+fDXzAqYzeV EAtkEZegTQwpjY3JaAZgNFDNSkjpkSbeR0BiQDqi/UB3SSlvf1/VvEuABJEPuoKzfqhi by2aDXIH3p5zltaA/lUwpHvzv8Vl87femXh+u0Mi6e3fkP06T5RxCHll7cPbVxGiVxrX agJE/Yt5TiUFM2Dnt8BMR3lAyIB8ShTZizIXvAJ7ail6LaRjQh4E/jn6lLVHjjenEjsM sHCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ci8LFgQ7vUercRuHwdbPm1kJEhWLrkBGjnE054jklvk=; b=qrSWSjcvtr/JzKInXYbBxyWuECJ+ce/VELajOTCvyTgHeJ/mLgq2s/FT8S7s3waoTS TGh5JCJc/nV/XyKI62exHRPmmeEejIJruvSwz6kIarDronY2LuljAndC3Z49IAhR3cin UWbgMCP+tebLfNjMKBnuIBMVQmbVsuhg0zeVZfgBiUydXbEg9wnQepse9E8iPpPLNUZB IqhoveQt9DzU9L1LQG81vNwYilx3SoTfH66+rs8MOcIQKwppdHdtoOvZHg/pPn454/aw Cd9sS5S8e0lfLSbnta36mnwcbJMztPdbZyuEupd+s3XqVwp0TA75gSFRwBm+9CZcGM4K Jw3w== X-Gm-Message-State: APf1xPBwRjEI+9P1hcteZykzvIJNAnmgk630tao3MBoNlUwsF6GCrd+H mSdHHkao/J8nrNRmZ/ODenk3Y8y0 X-Google-Smtp-Source: AH8x224rP3r5ADsoVYY9zgLySY+TyaV83vNvkWT93zgYYEXTYXb2dXoyO2OjQ3cX6tL3iEL/+xYz1g== X-Received: by 10.28.143.195 with SMTP id r186mr4478467wmd.82.1518453548133; Mon, 12 Feb 2018 08:39:08 -0800 (PST) Received: from skynet.lan (175.red-2-137-31.dynamicip.rima-tde.net. [2.137.31.175]) by smtp.gmail.com with ESMTPSA id j144sm5750202wmj.45.2018.02.12.08.39.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Feb 2018 08:39:07 -0800 (PST) From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= To: u-boot@lists.denx.de, sjg@chromium.org, daniel.schwierzeck@gmail.com, mugunthanvnm@ti.com, jteki@openedev.com Date: Mon, 12 Feb 2018 17:38:50 +0100 Message-Id: <20180212163858.25601-7-noltari@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180212163858.25601-1-noltari@gmail.com> References: <20180212163858.25601-1-noltari@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [RFC 06/14] phy: add support for internal phys X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Signed-off-by: Álvaro Fernández Rojas --- include/phy.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/phy.h b/include/phy.h index 0543ec10c2..8f3e53db01 100644 --- a/include/phy.h +++ b/include/phy.h @@ -50,6 +50,7 @@ typedef enum { + PHY_INTERFACE_MODE_INTERNAL, PHY_INTERFACE_MODE_MII, PHY_INTERFACE_MODE_GMII, PHY_INTERFACE_MODE_SGMII, @@ -72,6 +73,7 @@ typedef enum { } phy_interface_t; static const char *phy_interface_strings[] = { + [PHY_INTERFACE_MODE_INTERNAL] = "internal", [PHY_INTERFACE_MODE_MII] = "mii", [PHY_INTERFACE_MODE_GMII] = "gmii", [PHY_INTERFACE_MODE_SGMII] = "sgmii", From patchwork Mon Feb 12 16:38:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 872163 X-Patchwork-Delegate: daniel.schwierzeck@googlemail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="CFWTOxn1"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zgBVC75HKz9sRW for ; Tue, 13 Feb 2018 03:49:55 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 89A87C21F18; Mon, 12 Feb 2018 16:41:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 3E187C21E73; Mon, 12 Feb 2018 16:39:52 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 1DC60C21EDC; Mon, 12 Feb 2018 16:39:15 +0000 (UTC) Received: from mail-wr0-f196.google.com (mail-wr0-f196.google.com [209.85.128.196]) by lists.denx.de (Postfix) with ESMTPS id 8240DC21E76 for ; Mon, 12 Feb 2018 16:39:10 +0000 (UTC) Received: by mail-wr0-f196.google.com with SMTP id k32so9361105wrk.4 for ; Mon, 12 Feb 2018 08:39:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LI83yR1l0clEx1jJ6aGwfaiZwxH14ODHnREEY2O5KTI=; b=CFWTOxn1NvKPo08kw4nLqImW6G+BjQOWlS7PT+8Pk8l0xbwPg4t3T3LwmmZyjAP1hI qaMp+z0S6oxYaky/kd4XrdVgg6HzqBrkaQGlECmG+WYvPktWg5myxIJ9YvtW6p9A1DWF ISMAMcIhVZG7B1WbzHyXbs1PmQiiEtCLMoiYn0D6COh18y3+7UKTYukdPTN5r8BGIBoz 7oHVJXJJVF8UGh9LnDODmv48FRMN4KNJou1QSg2R88fAvobwcwjfHxzPE86uIGYHc70G 4Lvhof4w2+sWNkEQyShyslq7r+SsvnK2WsBo8PYlaxmSHngs+G4YW24p1SHen9aDzlr1 cg+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LI83yR1l0clEx1jJ6aGwfaiZwxH14ODHnREEY2O5KTI=; b=AB4luRRJXrCwRyUEbGJUOa4CU1G4a1+2Ift4HeNFrtBnhBMyZP/Tf0uHrtNUDe/9u2 U3ke0EZTmvQKBWCaOUZuPjQtPbS5OcN5wJOse8xmmzq9P0NLLg9ncTcacuS70M/T4rxD xJXfOFzwxsGiPfmqW2pQv5Y8E/u39KJIfHlwxmHuATT5JR/qPzbepkKJiG2rkjEGWro3 kF7lwWncjG2XMCqcWzbzE48l3LTysb9CpFJXgGHhoHOkTswRKYQxAMbRpmuCXj6Pj7Wu lSm702i88acFmx8JyNZpVXFb3xcmRsj8GPo+d1KsoayxlisnFOJMNjDOhxanzPcdrCJS /guw== X-Gm-Message-State: APf1xPDj3UdKB92vULMC/FiyUkP0vKd4ye99+3bJGHBA96Pz5IY1jeoW 5kbrhzmlYmeNpx14MUAysZVs5pLM X-Google-Smtp-Source: AH8x227qlrjYxQDk46dhvA2VUgnIbL/uQ+FI/4Yvp5MjrekKsswwICFmS5LEnqNUh2br4GRFa4KlMw== X-Received: by 10.223.197.67 with SMTP id s3mr601047wrf.239.1518453549602; Mon, 12 Feb 2018 08:39:09 -0800 (PST) Received: from skynet.lan (175.red-2-137-31.dynamicip.rima-tde.net. [2.137.31.175]) by smtp.gmail.com with ESMTPSA id j144sm5750202wmj.45.2018.02.12.08.39.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Feb 2018 08:39:08 -0800 (PST) From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= To: u-boot@lists.denx.de, sjg@chromium.org, daniel.schwierzeck@gmail.com, mugunthanvnm@ti.com, jteki@openedev.com Date: Mon, 12 Feb 2018 17:38:51 +0100 Message-Id: <20180212163858.25601-8-noltari@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180212163858.25601-1-noltari@gmail.com> References: <20180212163858.25601-1-noltari@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [RFC 07/14] net: add support for bcm6348-enet X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Signed-off-by: Álvaro Fernández Rojas --- drivers/net/Kconfig | 9 + drivers/net/Makefile | 1 + drivers/net/bcm6348-eth.c | 517 +++++++++++++++++++++++++++++++++++++++++ include/configs/bmips_common.h | 5 +- 4 files changed, 531 insertions(+), 1 deletion(-) create mode 100644 drivers/net/bcm6348-eth.c diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index de1947ccc1..12a231cc99 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -71,6 +71,15 @@ config BCM_SF2_ETH_GMAC by the BCM_SF2_ETH driver. Say Y to any bcmcygnus based platforms. +config BCM6348_ETH + bool "BCM6348 EMAC support" + depends on DM_ETH && ARCH_BMIPS + select DMA + select MII + select PHYLIB + help + This driver supports the BCM6348 Ethernet MAC. + config DWC_ETH_QOS bool "Synopsys DWC Ethernet QOS device support" depends on DM_ETH diff --git a/drivers/net/Makefile b/drivers/net/Makefile index ac5443c752..282adbc775 100644 --- a/drivers/net/Makefile +++ b/drivers/net/Makefile @@ -8,6 +8,7 @@ obj-$(CONFIG_ALTERA_TSE) += altera_tse.o obj-$(CONFIG_AG7XXX) += ag7xxx.o obj-$(CONFIG_ARMADA100_FEC) += armada100_fec.o +obj-$(CONFIG_BCM6348_ETH) += bcm6348-eth.o obj-$(CONFIG_DRIVER_AT91EMAC) += at91_emac.o obj-$(CONFIG_DRIVER_AX88180) += ax88180.o obj-$(CONFIG_BCM_SF2_ETH) += bcm-sf2-eth.o diff --git a/drivers/net/bcm6348-eth.c b/drivers/net/bcm6348-eth.c new file mode 100644 index 0000000000..890b7d5396 --- /dev/null +++ b/drivers/net/bcm6348-eth.c @@ -0,0 +1,517 @@ +/* + * Copyright (C) 2018 Álvaro Fernández Rojas + * + * Derived from linux/drivers/net/ethernet/broadcom/bcm63xx_enet.c: + * Copyright (C) 2008 Maxime Bizon + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define ETH_ZLEN 60 + +#define ETH_TX_WATERMARK 32 +#define ETH_MAX_MTU_SIZE 1518 + +#define ETH_TIMEOUT 100 + +/* ETH Receiver Configuration register */ +#define ETH_RXCFG_REG 0x00 +#define ETH_RXCFG_ENFLOW_SHIFT 5 +#define ETH_RXCFG_ENFLOW_MASK (1 << ETH_RXCFG_ENFLOW_SHIFT) + +/* ETH Receive Maximum Length register */ +#define ETH_RXMAXLEN_REG 0x04 +#define ETH_RXMAXLEN_SHIFT 0 +#define ETH_RXMAXLEN_MASK (0x7ff << ETH_RXMAXLEN_SHIFT) + +/* ETH Transmit Maximum Length register */ +#define ETH_TXMAXLEN_REG 0x08 +#define ETH_TXMAXLEN_SHIFT 0 +#define ETH_TXMAXLEN_MASK (0x7ff << ETH_TXMAXLEN_SHIFT) + +/* MII Status/Control register */ +#define MII_SC_REG 0x10 +#define MII_SC_MDCFREQDIV_SHIFT 0 +#define MII_SC_MDCFREQDIV_MASK (0x7f << MII_SC_MDCFREQDIV_SHIFT) +#define MII_SC_PREAMBLE_EN_SHIFT 7 +#define MII_SC_PREAMBLE_EN_MASK (1 << MII_SC_PREAMBLE_EN_SHIFT) + +/* MII Data register */ +#define MII_DAT_REG 0x14 +#define MII_DAT_DATA_SHIFT 0 +#define MII_DAT_DATA_MASK (0xffff << MII_DAT_DATA_SHIFT) +#define MII_DAT_TA_SHIFT 16 +#define MII_DAT_TA_MASK (0x3 << MII_DAT_TA_SHIFT) +#define MII_DAT_REG_SHIFT 18 +#define MII_DAT_REG_MASK (0x1f << MII_DAT_REG_SHIFT) +#define MII_DAT_PHY_SHIFT 23 +#define MII_DAT_PHY_MASK (0x1f << MII_DAT_PHY_SHIFT) +#define MII_DAT_OP_SHIFT 28 +#define MII_DAT_OP_WRITE (0x5 << MII_DAT_OP_SHIFT) +#define MII_DAT_OP_READ (0x6 << MII_DAT_OP_SHIFT) + +/* ETH Interrupts Mask register */ +#define ETH_IRMASK_REG 0x18 + +/* ETH Interrupts register */ +#define ETH_IR_REG 0x1c +#define ETH_IR_MII_SHIFT 0 +#define ETH_IR_MII_MASK (1 << ETH_IR_MII_SHIFT) + +/* ETH Control register */ +#define ETH_CTL_REG 0x2c +#define ETH_CTL_ENABLE_SHIFT 0 +#define ETH_CTL_ENABLE_MASK (1 << ETH_CTL_ENABLE_SHIFT) +#define ETH_CTL_DISABLE_SHIFT 1 +#define ETH_CTL_DISABLE_MASK (1 << ETH_CTL_DISABLE_SHIFT) +#define ETH_CTL_RESET_SHIFT 2 +#define ETH_CTL_RESET_MASK (1 << ETH_CTL_RESET_SHIFT) +#define ETH_CTL_EPHY_SHIFT 3 +#define ETH_CTL_EPHY_MASK (1 << ETH_CTL_EPHY_SHIFT) + +/* ETH Transmit Control register */ +#define ETH_TXCTL_REG 0x30 +#define ETH_TXCTL_FD_SHIFT 0 +#define ETH_TXCTL_FD_MASK (1 << ETH_TXCTL_FD_SHIFT) + +/* ETH Transmit Watermask register */ +#define ETH_TXWMARK_REG 0x34 +#define ETH_TXWMARK_WM_SHIFT 0 +#define ETH_TXWMARK_WM_MASK (0x3f << ETH_TXWMARK_WM_SHIFT) + +/* MIB Control register */ +#define MIB_CTL_REG 0x38 +#define MIB_CTL_RDCLEAR_SHIFT 0 +#define MIB_CTL_RDCLEAR_MASK (1 << MIB_CTL_RDCLEAR_SHIFT) + +/* ETH Perfect Match registers */ +#define ETH_PM_CNT 4 +#define ETH_PML_REG(x) (0x58 + (x) * 0x8) +#define ETH_PMH_REG(x) (0x5c + (x) * 0x8) +#define ETH_PMH_VALID_SHIFT 16 +#define ETH_PMH_VALID_MASK (1 << ETH_PMH_VALID_SHIFT) + +/* MIB Counters registers */ +#define MIB_REG_CNT 55 +#define MIB_REG(x) (0x200 + (x) * 4) + +/* ETH data */ +struct bcm6348_eth_priv { + void __iomem *base; + /* DMA */ + struct dma rx_dma; + struct dma tx_dma; + /* PHY */ + int phy_id; + struct phy_device *phy_dev; +}; + +DECLARE_GLOBAL_DATA_PTR; + +static void bcm6348_eth_mac_disable(struct bcm6348_eth_priv *priv) +{ + /* disable emac */ + clrsetbits_be32(priv->base + ETH_CTL_REG, ETH_CTL_ENABLE_MASK, + ETH_CTL_DISABLE_MASK); + + /* wait until emac is disabled */ + if (wait_for_bit_be32(priv->base + ETH_CTL_REG, + ETH_CTL_DISABLE_MASK, false, + ETH_TIMEOUT, false)) + pr_err("error disabling emac\n"); +} + +static void bcm6348_eth_mac_enable(struct bcm6348_eth_priv *priv) +{ + setbits_be32(priv->base + ETH_CTL_REG, ETH_CTL_ENABLE_MASK); +} + +static void bcm6348_eth_mac_reset(struct bcm6348_eth_priv *priv) +{ + /* reset emac */ + writel_be(ETH_CTL_RESET_MASK, priv->base + ETH_CTL_REG); + wmb(); + + /* wait until emac is reset */ + if (wait_for_bit_be32(priv->base + ETH_CTL_REG, + ETH_CTL_RESET_MASK, false, + ETH_TIMEOUT, false)) + pr_err("error resetting emac\n"); +} + +static int bcm6348_eth_recv(struct udevice *dev, int flags, uchar **packetp) +{ + struct bcm6348_eth_priv *priv = dev_get_priv(dev); + + return dma_receive(&priv->rx_dma, (void *)packetp); +} + +static int bcm6348_eth_send(struct udevice *dev, void *packet, int length) +{ + struct bcm6348_eth_priv *priv = dev_get_priv(dev); + + length = max(length, ETH_ZLEN); + + return dma_send(&priv->tx_dma, (void **)packet, length); +} + +static int bcm6348_eth_adjust_link(struct udevice *dev, + struct phy_device *phydev) +{ + struct bcm6348_eth_priv *priv = dev_get_priv(dev); + + /* mac duplex parameters */ + if (phydev->duplex) + setbits_be32(priv->base + ETH_TXCTL_REG, ETH_TXCTL_FD_MASK); + else + clrbits_be32(priv->base + ETH_TXCTL_REG, ETH_TXCTL_FD_MASK); + + /* rx flow control (pause frame handling) */ + if (phydev->pause) + setbits_be32(priv->base + ETH_RXCFG_REG, + ETH_RXCFG_ENFLOW_MASK); + else + clrbits_be32(priv->base + ETH_RXCFG_REG, + ETH_RXCFG_ENFLOW_MASK); + + return 0; +} + +static int bcm6348_eth_start(struct udevice *dev) +{ + struct bcm6348_eth_priv *priv = dev_get_priv(dev); + int ret, i; + + /* enable dma rx channel */ + dma_enable(&priv->rx_dma); + + /* enable dma tx channel */ + dma_enable(&priv->tx_dma); + + ret = phy_startup(priv->phy_dev); + if (ret) { + pr_err("could not initialize phy\n"); + return ret; + } + + if (!priv->phy_dev->link) { + pr_err("no phy link\n"); + return -EIO; + } + + bcm6348_eth_adjust_link(dev, priv->phy_dev); + + /* zero mib counters */ + for (i = 0; i < MIB_REG_CNT; i++) + writel_be(0, MIB_REG(i)); + + /* enable rx flow control */ + setbits_be32(priv->base + ETH_RXCFG_REG, ETH_RXCFG_ENFLOW_MASK); + + /* set max rx/tx length */ + writel_be((ETH_MAX_MTU_SIZE << ETH_RXMAXLEN_SHIFT) & + ETH_RXMAXLEN_MASK, priv->base + ETH_RXMAXLEN_REG); + writel_be((ETH_MAX_MTU_SIZE << ETH_TXMAXLEN_SHIFT) & + ETH_TXMAXLEN_MASK, priv->base + ETH_TXMAXLEN_REG); + + /* set correct transmit fifo watermark */ + writel_be((ETH_TX_WATERMARK << ETH_TXWMARK_WM_SHIFT) & + ETH_TXWMARK_WM_MASK, priv->base + ETH_TXWMARK_REG); + + /* enable emac */ + bcm6348_eth_mac_enable(priv); + + /* clear interrupts */ + writel_be(0, priv->base + ETH_IRMASK_REG); + + return 0; +} + +static void bcm6348_eth_stop(struct udevice *dev) +{ + struct bcm6348_eth_priv *priv = dev_get_priv(dev); + + /* disable dma rx channel */ + dma_disable(&priv->rx_dma); + + /* disable dma tx channel */ + dma_disable(&priv->tx_dma); + + /* disable emac */ + bcm6348_eth_mac_disable(priv); +} + +static int bcm6348_eth_write_hwaddr(struct udevice *dev) +{ + struct eth_pdata *pdata = dev_get_platdata(dev); + struct bcm6348_eth_priv *priv = dev_get_priv(dev); + bool running = false; + + /* check if emac is running */ + if (readl_be(priv->base + ETH_CTL_REG) & ETH_CTL_ENABLE_MASK) + running = true; + + /* disable emac */ + if (running) + bcm6348_eth_mac_disable(priv); + + /* set mac address */ + writel_be((pdata->enetaddr[2] << 24) | (pdata->enetaddr[3]) << 16 | + (pdata->enetaddr[4]) << 8 | (pdata->enetaddr[5]), + priv->base + ETH_PML_REG(0)); + writel_be((pdata->enetaddr[1]) | (pdata->enetaddr[0] << 8) | + ETH_PMH_VALID_MASK, priv->base + ETH_PMH_REG(0)); + + /* enable emac */ + if (running) + bcm6348_eth_mac_enable(priv); + + return 0; +} + +static const struct eth_ops bcm6348_eth_ops = { + .recv = bcm6348_eth_recv, + .send = bcm6348_eth_send, + .start = bcm6348_eth_start, + .stop = bcm6348_eth_stop, + .write_hwaddr = bcm6348_eth_write_hwaddr, +}; + +static const struct udevice_id bcm6348_eth_ids[] = { + { .compatible = "brcm,bcm6348-enet", }, + { /* sentinel */ } +}; + +static int bcm6348_mdio_op(void __iomem *base, uint32_t data) +{ + /* make sure mii interrupt status is cleared */ + writel_be(ETH_IR_MII_MASK, base + ETH_IR_REG); + + /* issue mii op */ + writel_be(data, base + MII_DAT_REG); + + /* wait until emac is disabled */ + return wait_for_bit_be32(base + ETH_IR_REG, + ETH_IR_MII_MASK, true, + ETH_TIMEOUT, false); +} + +static int bcm6348_mdio_read(struct mii_dev *bus, int addr, int devaddr, + int reg) +{ + void __iomem *base = bus->priv; + uint32_t val; + + val = MII_DAT_OP_READ; + val |= (reg << MII_DAT_REG_SHIFT) & MII_DAT_REG_MASK; + val |= (0x2 << MII_DAT_TA_SHIFT) & MII_DAT_TA_MASK; + val |= (addr << MII_DAT_PHY_SHIFT) & MII_DAT_PHY_MASK; + + if (bcm6348_mdio_op(base, val)) { + pr_err("%s: timeout\n", __func__); + return -EINVAL; + } + + val = readl_be(base + MII_DAT_REG) & MII_DAT_DATA_MASK; + val >>= MII_DAT_DATA_SHIFT; + + return val; +} + +static int bcm6348_mdio_write(struct mii_dev *bus, int addr, int dev_addr, + int reg, u16 value) +{ + void __iomem *base = bus->priv; + uint32_t val; + + val = MII_DAT_OP_WRITE; + val |= (reg << MII_DAT_REG_SHIFT) & MII_DAT_REG_MASK; + val |= (0x2 << MII_DAT_TA_SHIFT) & MII_DAT_TA_MASK; + val |= (addr << MII_DAT_PHY_SHIFT) & MII_DAT_PHY_MASK; + val |= (value << MII_DAT_DATA_SHIFT) & MII_DAT_DATA_MASK; + + if (bcm6348_mdio_op(base, val)) { + pr_err("%s: timeout\n", __func__); + return -EINVAL; + } + + return 0; +} + +static int bcm6348_mdio_init(const char *name, void __iomem *base) +{ + struct mii_dev *bus; + + bus = mdio_alloc(); + if (!bus) { + pr_err("%s: failed to allocate MDIO bus\n", __func__); + return -ENOMEM; + } + + bus->read = bcm6348_mdio_read; + bus->write = bcm6348_mdio_write; + bus->priv = base; + snprintf(bus->name, sizeof(bus->name), "%s", name); + + return mdio_register(bus); +} + +static int bcm6348_phy_init(struct udevice *dev) +{ + struct eth_pdata *pdata = dev_get_platdata(dev); + struct bcm6348_eth_priv *priv = dev_get_priv(dev); + struct mii_dev *bus; + + /* get mii bus */ + bus = miiphy_get_dev_by_name(dev->name); + + /* phy connect */ + priv->phy_dev = phy_connect(bus, priv->phy_id, dev, + pdata->phy_interface); + if (!priv->phy_dev) { + pr_err("%s: no phy device\n", __func__); + return -ENODEV; + } + + priv->phy_dev->supported = (SUPPORTED_10baseT_Half | + SUPPORTED_10baseT_Full | + SUPPORTED_100baseT_Half | + SUPPORTED_100baseT_Full | + SUPPORTED_Autoneg | + SUPPORTED_Pause | + SUPPORTED_MII); + priv->phy_dev->advertising = priv->phy_dev->supported; + + /* phy config */ + phy_config(priv->phy_dev); + + return 0; +} + +static int bcm6348_eth_probe(struct udevice *dev) +{ + struct eth_pdata *pdata = dev_get_platdata(dev); + struct bcm6348_eth_priv *priv = dev_get_priv(dev); + void *blob = (void *)gd->fdt_blob; + int node = dev_of_offset(dev); + const char *phy_mode; + fdt_addr_t addr; + int phy_node, ret, i; + + /* get base address */ + addr = devfdt_get_addr(dev); + if (addr == FDT_ADDR_T_NONE) + return -EINVAL; + + /* get phy mode */ + pdata->phy_interface = PHY_INTERFACE_MODE_NONE; + phy_mode = fdt_getprop(blob, node, "phy-mode", NULL); + if (phy_mode) + pdata->phy_interface = phy_get_interface_by_name(phy_mode); + if (pdata->phy_interface == PHY_INTERFACE_MODE_NONE) + return -ENODEV; + + /* get phy */ + phy_node = fdtdec_lookup_phandle(blob, node, "phy"); + if (phy_node >= 0) + priv->phy_id = fdtdec_get_int(blob, phy_node, "reg", -1); + else + return -EINVAL; + + /* get dma channels */ + ret = dma_get_by_name(dev, "tx", &priv->tx_dma); + if (ret) + return -EINVAL; + + ret = dma_get_by_name(dev, "rx", &priv->rx_dma); + if (ret) + return -EINVAL; + + /* try to enable clocks */ + for (i = 0; ; i++) { + struct clk clk; + int ret; + + ret = clk_get_by_index(dev, i, &clk); + if (ret < 0) + break; + if (clk_enable(&clk)) + pr_err("failed to enable clock %d\n", i); + clk_free(&clk); + } + + /* try to perform resets */ + for (i = 0; ; i++) { + struct reset_ctl reset; + int ret; + + ret = reset_get_by_index(dev, i, &reset); + if (ret < 0) + break; + if (reset_deassert(&reset)) + pr_err("failed to deassert reset %d\n", i); + reset_free(&reset); + } + + /* get base addr */ + priv->base = ioremap(addr, 0); + pdata->iobase = (phys_addr_t) priv->base; + + /* disable emac */ + bcm6348_eth_mac_disable(priv); + + /* reset emac */ + bcm6348_eth_mac_reset(priv); + + /* select correct mii interface */ + if (pdata->phy_interface == PHY_INTERFACE_MODE_INTERNAL) + clrbits_be32(priv->base + ETH_CTL_REG, ETH_CTL_EPHY_MASK); + else + setbits_be32(priv->base + ETH_CTL_REG, ETH_CTL_EPHY_MASK); + + /* turn on mdc clock */ + writel_be((0x1f << MII_SC_MDCFREQDIV_SHIFT) | + MII_SC_PREAMBLE_EN_MASK, priv->base + MII_SC_REG); + + /* set mib counters to not clear when read */ + clrbits_be32(priv->base + MIB_CTL_REG, MIB_CTL_RDCLEAR_MASK); + + /* initialize perfect match registers */ + for (i = 0; i < ETH_PM_CNT; i++) { + writel_be(0, priv->base + ETH_PML_REG(i)); + writel_be(0, priv->base + ETH_PMH_REG(i)); + } + + /* init mii bus */ + ret = bcm6348_mdio_init(dev->name, priv->base); + if (ret) + return ret; + + /* init phy */ + ret = bcm6348_phy_init(dev); + if (ret) + return ret; + + return 0; +} + +U_BOOT_DRIVER(bcm6348_eth) = { + .name = "bcm6348_eth", + .id = UCLASS_ETH, + .of_match = bcm6348_eth_ids, + .ops = &bcm6348_eth_ops, + .platdata_auto_alloc_size = sizeof(struct eth_pdata), + .priv_auto_alloc_size = sizeof(struct bcm6348_eth_priv), + .probe = bcm6348_eth_probe, +}; diff --git a/include/configs/bmips_common.h b/include/configs/bmips_common.h index 38bf7a272b..eb66512f67 100644 --- a/include/configs/bmips_common.h +++ b/include/configs/bmips_common.h @@ -7,6 +7,9 @@ #ifndef __CONFIG_BMIPS_COMMON_H #define __CONFIG_BMIPS_COMMON_H +/* ETH */ +#define CONFIG_PHY_RESET_DELAY 20 + /* UART */ #define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200, \ 230400, 500000, 1500000 } @@ -17,7 +20,7 @@ /* Memory usage */ #define CONFIG_SYS_MAXARGS 24 -#define CONFIG_SYS_MALLOC_LEN (1024 * 1024) +#define CONFIG_SYS_MALLOC_LEN (2 * 1024 * 1024) #define CONFIG_SYS_BOOTPARAMS_LEN (128 * 1024) #define CONFIG_SYS_CBSIZE 512 From patchwork Mon Feb 12 16:38:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 872150 X-Patchwork-Delegate: daniel.schwierzeck@googlemail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="faD5tTik"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zgBLK3dYYz9sRW for ; Tue, 13 Feb 2018 03:43:05 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 3A40EC21F1B; Mon, 12 Feb 2018 16:41:15 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 7E897C21F05; Mon, 12 Feb 2018 16:39:31 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 70797C21E39; Mon, 12 Feb 2018 16:39:15 +0000 (UTC) Received: from mail-wm0-f67.google.com (mail-wm0-f67.google.com [74.125.82.67]) by lists.denx.de (Postfix) with ESMTPS id 40E83C21EE8 for ; Mon, 12 Feb 2018 16:39:11 +0000 (UTC) Received: by mail-wm0-f67.google.com with SMTP id 141so11047562wme.3 for ; Mon, 12 Feb 2018 08:39:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=jL+zvNsgszwSLt6Is5FwBXW/v6GKoTpktq0f38mSESg=; b=faD5tTikEDEF0fpa7q7EXLXU0XylmjiTBlQX5HXRyYXb07GulH02WMYli6E4ZUe+o8 c6+hk25AWa2/aOlpVYs6tw+atIbWnMBr1HxHPRqFhLGm53nA0mtw1eACllFOcCsSa4gA 6Y8SLWO8sdFYXuMDy+fbu+xhUOVdlA09aVfXBjg0gnYaetPwyVpBJV1Zd8rbd5Nqgwfy 9Y1hWrO3C+OzWYLyZ61sNLyEXqfp9iPoQkX6acS3iUteBvFXfyMF5mYDEmiNzSZTYdPT K9HET1n23gkzvJaCep8fD8g5fVZx/aZFVR7IdKc1vlZlSDsT+bhr2oRyxguE4X19q1V/ tZfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=jL+zvNsgszwSLt6Is5FwBXW/v6GKoTpktq0f38mSESg=; b=bOugAw5jV8dNYyb7VTaMDLXCaU6S4e4U5acEe2zm8ixOPmFVaS94VcSpvA0sCB0oFW ZEk5mhTC1Eh+vd+r6WEjvPq+ZBSsbeLkpmjx5YXnNM6Pc7eHW0SA5hKQvK9DKkq8QNLV 2lkglccgCVHpReag49Rr69gS0jT0vfdmwRSX/FAczuBOHoTJop6tr7ueOIDcZ3MEQXyf 43RxxtxqSdJSrIl5ol2ZAmSJssqFedjwyXgugv1c4ow21wZj2zXDoh0yqNn6AjrlmLbj kF7TsbDW1KbN6SSCudCb0iU70+uTf8W1LVc+jAMepR/cwsS/74iyjQDm3Zu1hhToWKuX C7Eg== X-Gm-Message-State: APf1xPCtzpk6ASnHQWTo8NrmFXYvVw3xcxmRjbphXWft32gebWB8oLP8 cTosdhK6Hn7S8bK5h9qYdvFeY7OZ X-Google-Smtp-Source: AH8x225tH+BRKowbAgrqZPgTI50H0i4lUzimVfazfhOe92FfFsbE3F75Tagr3XKb9l4UuU0BykUOhQ== X-Received: by 10.28.235.17 with SMTP id j17mr4249670wmh.52.1518453550615; Mon, 12 Feb 2018 08:39:10 -0800 (PST) Received: from skynet.lan (175.red-2-137-31.dynamicip.rima-tde.net. [2.137.31.175]) by smtp.gmail.com with ESMTPSA id j144sm5750202wmj.45.2018.02.12.08.39.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Feb 2018 08:39:09 -0800 (PST) From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= To: u-boot@lists.denx.de, sjg@chromium.org, daniel.schwierzeck@gmail.com, mugunthanvnm@ti.com, jteki@openedev.com Date: Mon, 12 Feb 2018 17:38:52 +0100 Message-Id: <20180212163858.25601-9-noltari@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180212163858.25601-1-noltari@gmail.com> References: <20180212163858.25601-1-noltari@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [RFC 08/14] bmips: bcm6338: add support for bcm6348-enet X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Signed-off-by: Álvaro Fernández Rojas --- arch/mips/dts/brcm,bcm6338.dtsi | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/arch/mips/dts/brcm,bcm6338.dtsi b/arch/mips/dts/brcm,bcm6338.dtsi index 4125f71d9f..621278c9d1 100644 --- a/arch/mips/dts/brcm,bcm6338.dtsi +++ b/arch/mips/dts/brcm,bcm6338.dtsi @@ -145,5 +145,20 @@ dma-channels = <6>; resets = <&periph_rst BCM6338_RST_DMAMEM>; }; + + enet: ethernet@fffe2800 { + compatible = "brcm,bcm6348-enet"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0xfffe2800 0x2dc>; + clocks = <&periph_clk BCM6338_CLK_ENET>; + resets = <&periph_rst BCM6338_RST_ENET>; + dmas = <&iudma BCM6338_DMA_ENET_RX>, + <&iudma BCM6338_DMA_ENET_TX>; + dma-names = "rx", + "tx"; + + status = "disabled"; + }; }; }; From patchwork Mon Feb 12 16:38:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 872161 X-Patchwork-Delegate: daniel.schwierzeck@googlemail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="VWrFH9Gi"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zgBTV5GCzz9t39 for ; Tue, 13 Feb 2018 03:49:18 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 4E0E6C21E76; Mon, 12 Feb 2018 16:42:26 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 93D89C21F1D; Mon, 12 Feb 2018 16:39:53 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 7B783C21EDC; Mon, 12 Feb 2018 16:39:16 +0000 (UTC) Received: from mail-wm0-f67.google.com (mail-wm0-f67.google.com [74.125.82.67]) by lists.denx.de (Postfix) with ESMTPS id 53017C21EE7 for ; Mon, 12 Feb 2018 16:39:12 +0000 (UTC) Received: by mail-wm0-f67.google.com with SMTP id g1so10724255wmg.2 for ; Mon, 12 Feb 2018 08:39:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4t8cas29lSIpPlAvl6Q/h3jNsME1oJShXUpRgkVfvRY=; b=VWrFH9GiQIDQT6rXenx87lCad0WLrkPQ9Zi15h1/6o8qvsu63HrNphX9rFkOr28kMB oyBATiAAgew4bW8nSkXvFvIxwVPTFZxNiUrUHl1PurWoG1WE+Vv3jQ6yhYpJfrqOXCCb 93jrwxXri8Y5wNxh2/QWGPSPReb2pfwkgQNuYi7tz+6ije+GpNDWb5jhrEOg0sXjFIdz Qk8i3RplJHNJDuUIuiV2MLOT/FvbNaBYcBPJ+5zY26OCYsn18NSNNoI7Vl9bsF047Muc bcIk5BmaY/49eAUJfoleGEEkFSoy2kdCj92UmqV4q9uLexTLjSWHM3yv+IgIMwkcQMFR P7kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4t8cas29lSIpPlAvl6Q/h3jNsME1oJShXUpRgkVfvRY=; b=iAfbj3UHAKpuPA1ClwwfaiNr2TxieoAbwyHJOP/XiYaHqXG3bzViGQcEp1srLchSbi HX2sk/hi8s2w92w+Hp6MWECuXNcWsM1OMNuWOhjBeuaQ12gEZaTx9kCbuZ49FeGrcaFl 3Aar9WeNVEQINhhV73YS/hwc1cjH+AhPPGqm9iCTZBU3FSeTgd1RGKhZryJdX5BXh6e5 PzW1WEpwovUJK0hV+8o42r4mFcIMWLuOhf6dfU+3gmDVpxHZ6bMuhT9413SLMC9mUqok 9kW4KNzOa3yaKhqbWYYn/+xLHL2C1gLGj4xk3KHS2d5jQN26mxaf8M1qXMCovkazm/xC 99rA== X-Gm-Message-State: APf1xPDYCHMBtV687qGw2GheOO9V+RDU/VNKVgzik+979wCgQrU9fM2S hABzd8fvYtliAmMIIh0iLdxQ+pRE X-Google-Smtp-Source: AH8x225fGP3ELWcm2XRfejOrMvcwCh6gwlaECqBV9bgbGe3DzgH8kaZCR5hhB3A9KXazHJUw0JyS2A== X-Received: by 10.28.140.1 with SMTP id o1mr3711777wmd.141.1518453551824; Mon, 12 Feb 2018 08:39:11 -0800 (PST) Received: from skynet.lan (175.red-2-137-31.dynamicip.rima-tde.net. [2.137.31.175]) by smtp.gmail.com with ESMTPSA id j144sm5750202wmj.45.2018.02.12.08.39.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Feb 2018 08:39:11 -0800 (PST) From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= To: u-boot@lists.denx.de, sjg@chromium.org, daniel.schwierzeck@gmail.com, mugunthanvnm@ti.com, jteki@openedev.com Date: Mon, 12 Feb 2018 17:38:53 +0100 Message-Id: <20180212163858.25601-10-noltari@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180212163858.25601-1-noltari@gmail.com> References: <20180212163858.25601-1-noltari@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [RFC 09/14] bmips: enable f@st1704 enet support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Signed-off-by: Álvaro Fernández Rojas --- arch/mips/dts/sagem,f@st1704.dts | 12 ++++++++++++ configs/sagem_f@st1704_ram_defconfig | 9 ++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/arch/mips/dts/sagem,f@st1704.dts b/arch/mips/dts/sagem,f@st1704.dts index dd0e5b8b7c..99d031f10a 100644 --- a/arch/mips/dts/sagem,f@st1704.dts +++ b/arch/mips/dts/sagem,f@st1704.dts @@ -40,6 +40,18 @@ }; }; +&enet { + status = "okay"; + phy = <&enetphy>; + phy-mode = "mii"; + + enetphy: fixed-link { + reg = <1>; + speed = <100>; + full-duplex; + }; +}; + &gpio { status = "okay"; }; diff --git a/configs/sagem_f@st1704_ram_defconfig b/configs/sagem_f@st1704_ram_defconfig index 0adcd46d51..1a640781b7 100644 --- a/configs/sagem_f@st1704_ram_defconfig +++ b/configs/sagem_f@st1704_ram_defconfig @@ -28,11 +28,15 @@ CONFIG_CMD_MEMINFO=y # CONFIG_CMD_LOADS is not set CONFIG_CMD_SF=y CONFIG_CMD_SPI=y -# CONFIG_CMD_NET is not set +CONFIG_CMD_DHCP=y # CONFIG_CMD_NFS is not set +CONFIG_CMD_MII=y +CONFIG_CMD_PING=y # CONFIG_CMD_MISC is not set CONFIG_OF_EMBED=y +CONFIG_NET_RANDOM_ETHADDR=y # CONFIG_DM_DEVICE_REMOVE is not set +CONFIG_BCM6348_IUDMA=y CONFIG_DM_GPIO=y CONFIG_BCM6345_GPIO=y CONFIG_LED=y @@ -41,6 +45,9 @@ CONFIG_DM_SPI_FLASH=y CONFIG_SPI_FLASH=y CONFIG_SPI_FLASH_WINBOND=y CONFIG_SPI_FLASH_MTD=y +CONFIG_PHY_FIXED=y +CONFIG_DM_ETH=y +CONFIG_BCM6348_ETH=y CONFIG_DM_RESET=y CONFIG_RESET_BCM6345=y # CONFIG_SPL_SERIAL_PRESENT is not set From patchwork Mon Feb 12 16:38:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 872160 X-Patchwork-Delegate: daniel.schwierzeck@googlemail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="tDu/Ac7T"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zgBSs5P91z9t3h for ; Tue, 13 Feb 2018 03:48:45 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 3F92EC21EAE; Mon, 12 Feb 2018 16:43:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 35374C21F41; Mon, 12 Feb 2018 16:40:07 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 0461AC21F21; Mon, 12 Feb 2018 16:39:17 +0000 (UTC) Received: from mail-wm0-f65.google.com (mail-wm0-f65.google.com [74.125.82.65]) by lists.denx.de (Postfix) with ESMTPS id 66E95C21EEB for ; Mon, 12 Feb 2018 16:39:13 +0000 (UTC) Received: by mail-wm0-f65.google.com with SMTP id v71so11107770wmv.2 for ; Mon, 12 Feb 2018 08:39:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=MIOHGl3HspRWAg75DOH6SYS7nc4G/6d8vAhOq5PClX8=; b=tDu/Ac7TUQr2DKyE9XIA05Ml0XXLnHV8sUisUnkfEmC/1Tnlh0g5FzRhgBhL8rF9Ku U9YVVJlTBuoNRp5bCi20TTP70f/9ut3xyqxKmwdplKjUs/s5uqJOVA048MxSzwqqNzew DtSfKTnUBtRA2T18jjyltpOjx/NUTvWAgUXWngkTrtCZvfzttR8asdN3vDUYUYVeAbaO +5degqUDQpa0CD7Uf3rHlx+iSFet4mMxWk3VuUB/5oEbBoLFlycfHf8afgUkrFrel3VQ efA0jIUj61UhL71azWS1JM4u3HF/QN65khSew45PW9Sb8vGUhW46Nop2YZTrDLbPPGPb 3tOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=MIOHGl3HspRWAg75DOH6SYS7nc4G/6d8vAhOq5PClX8=; b=oEndT3Z5+C9bHwBrn4nO4SdnxircOXgU4gbH75qqIK6WWdB9iPfCV2RJ9Tko8JBHGH 1uMBbfQoJPnqOCS2lfinn8dWLDbIHtZl+3pe2sxV69+hHSAo47Xt+RXY5a28ZG1jSCUx v9ONrU+5W/rX2ZF8eljWCTiIuZ0KsSSeNP5t2IT5VAzs5igJEZOpYViZ2BtuxmJvn1jG 10rbDfT7ikormqF6wfGpjNs7tqlsf4TMM8HTz6Q38lUpit4J3WdmLFvpaY6jgv5tWctS ib4wgjWNi4BwAwYodKnCpT43lcGnDU/AZIBlbVKHeQmEoq0VZKnF2fQiGWjUqaqaxSBU Q5SQ== X-Gm-Message-State: APf1xPAVzVvMBMnCJ+VAFHxSCE/qrt3BlB83wAPYljKi0UMforwpsZr+ cLbrNjKJXUH5FEY88RgagBOuzASD X-Google-Smtp-Source: AH8x2245J+qkDDida0ivC/MDsNtYmL1YoDwbiRgD2fEPA1ifIhqS5dZ7ozJ+q4nxb5jUrUecfFtaCw== X-Received: by 10.28.232.82 with SMTP id f79mr4550331wmh.72.1518453552835; Mon, 12 Feb 2018 08:39:12 -0800 (PST) Received: from skynet.lan (175.red-2-137-31.dynamicip.rima-tde.net. [2.137.31.175]) by smtp.gmail.com with ESMTPSA id j144sm5750202wmj.45.2018.02.12.08.39.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Feb 2018 08:39:12 -0800 (PST) From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= To: u-boot@lists.denx.de, sjg@chromium.org, daniel.schwierzeck@gmail.com, mugunthanvnm@ti.com, jteki@openedev.com Date: Mon, 12 Feb 2018 17:38:54 +0100 Message-Id: <20180212163858.25601-11-noltari@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180212163858.25601-1-noltari@gmail.com> References: <20180212163858.25601-1-noltari@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [RFC 10/14] bmips: bcm6348: add support for bcm6348-enet X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Signed-off-by: Álvaro Fernández Rojas --- arch/mips/dts/brcm,bcm6348.dtsi | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/arch/mips/dts/brcm,bcm6348.dtsi b/arch/mips/dts/brcm,bcm6348.dtsi index d774c59665..e540865019 100644 --- a/arch/mips/dts/brcm,bcm6348.dtsi +++ b/arch/mips/dts/brcm,bcm6348.dtsi @@ -162,6 +162,32 @@ u-boot,dm-pre-reloc; }; + enet0: ethernet@fffe6000 { + compatible = "brcm,bcm6348-enet"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0xfffe6000 0x2dc>; + dmas = <&iudma BCM6348_DMA_ENET0_RX>, + <&iudma BCM6348_DMA_ENET0_TX>; + dma-names = "rx", + "tx"; + + status = "disabled"; + }; + + enet1: ethernet@fffe6800 { + compatible = "brcm,bcm6348-enet"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0xfffe6800 0x2dc>; + dmas = <&iudma BCM6348_DMA_ENET1_RX>, + <&iudma BCM6348_DMA_ENET1_TX>; + dma-names = "rx", + "tx"; + + status = "disabled"; + }; + iudma: dma-controller@fffe7000 { compatible = "brcm,bcm6348-iudma"; reg = <0xfffe7000 0x1c>, From patchwork Mon Feb 12 16:38:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 872157 X-Patchwork-Delegate: daniel.schwierzeck@googlemail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="oNjF4SY0"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zgBQW0Wm5z9t39 for ; Tue, 13 Feb 2018 03:46:42 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 59BF2C21F02; Mon, 12 Feb 2018 16:43:53 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 06DC6C21EA7; Mon, 12 Feb 2018 16:40:51 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 74756C21EAE; Mon, 12 Feb 2018 16:39:18 +0000 (UTC) Received: from mail-wm0-f67.google.com (mail-wm0-f67.google.com [74.125.82.67]) by lists.denx.de (Postfix) with ESMTPS id 68D22C21EC5 for ; Mon, 12 Feb 2018 16:39:14 +0000 (UTC) Received: by mail-wm0-f67.google.com with SMTP id v123so11087554wmd.5 for ; Mon, 12 Feb 2018 08:39:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zPiqOM4UWdQId697HwzcMf+iLOsP1EM5H8flyEMGMlU=; b=oNjF4SY0xFjP7QtbHyqQ7UDdoOZ8grcSPJnG4t55cRdQuSx0MPemgs89vlknfa4g9+ fbBXnOrbYE/cBQPKlrNIg6xptmWH6xK0tvEccCNMHyLCyGNC0IqCq4AkVq2M5a/KrFIf RxZhuXl3rH8vFVQfQZOHqtZg1E1QlSn5uF/1D/ZuHSBQp6KsrImtm/NT4pOShBQ+xqDQ fBM75Hqig4Z03T89ueYRIZSTvbXwl9S2OWavNcPVbHBztbdDvfkaGzCpkGhk29/NON1V Bx8nfNzI2o/WCzT10TmS87rja08lQeNJlSqGc2Pl28pFS/+8xxKLTzim08jAa8YD0T7K CD4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zPiqOM4UWdQId697HwzcMf+iLOsP1EM5H8flyEMGMlU=; b=r2ir5ndRvSXVCpXjSP6mZUpW//WYYW5p5c6FFIG1TkYYR/q0rl9BtqiFAWFS2DRD5q b5k9cDOZrY56OzAadArJv9gYnTQwWefWzWsvzqYSYTRF/SKSDCiDlp4KVq03q1NjB0L+ w+35nY+Gs8SwL7Lt/4PcfAIzcAoJfS4qflULYsl+yzn9p5jW7rBrkp22CJk6uObxmlvF weMbSDwEcYCusEvL3w72oGu2lXTkCC9tn7A4tbyXCUX03KxwZe++tch3nSwYFJGKyXUO pLIEtz16+8hL5Ibj+IBti56mTrg5eVGqk/J0Cq0pwj68Jf7NRdlm8nnbooX3b0a5MDHG W3qA== X-Gm-Message-State: APf1xPAWHmCTGy9raSUzO+VOCLvcw+VMtQw/fWWJ/5MXHAmVk/iyRJSj tm07uZ9YLMuVpIL6HCUFOcTyptn7 X-Google-Smtp-Source: AH8x227beOIcn6DuLPGT41TaJnHvAFaKBpGZPUD1J9N4RtGxDiDvjHE7dZ+mSEc8SmF3CCgOJe+QMw== X-Received: by 10.28.38.133 with SMTP id m127mr3835227wmm.40.1518453553924; Mon, 12 Feb 2018 08:39:13 -0800 (PST) Received: from skynet.lan (175.red-2-137-31.dynamicip.rima-tde.net. [2.137.31.175]) by smtp.gmail.com with ESMTPSA id j144sm5750202wmj.45.2018.02.12.08.39.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Feb 2018 08:39:13 -0800 (PST) From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= To: u-boot@lists.denx.de, sjg@chromium.org, daniel.schwierzeck@gmail.com, mugunthanvnm@ti.com, jteki@openedev.com Date: Mon, 12 Feb 2018 17:38:55 +0100 Message-Id: <20180212163858.25601-12-noltari@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180212163858.25601-1-noltari@gmail.com> References: <20180212163858.25601-1-noltari@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [RFC 11/14] bmips: enable ct-5361 enet support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Signed-off-by: Álvaro Fernández Rojas --- arch/mips/dts/comtrend,ct-5361.dts | 12 ++++++++++++ configs/comtrend_ct5361_ram_defconfig | 8 +++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/arch/mips/dts/comtrend,ct-5361.dts b/arch/mips/dts/comtrend,ct-5361.dts index 74dc09046c..a78aa877fc 100644 --- a/arch/mips/dts/comtrend,ct-5361.dts +++ b/arch/mips/dts/comtrend,ct-5361.dts @@ -35,6 +35,18 @@ }; }; +&enet1 { + status = "okay"; + phy = <&enet1phy>; + phy-mode = "mii"; + + enet1phy: fixed-link { + reg = <1>; + speed = <100>; + full-duplex; + }; +}; + &gpio0 { status = "okay"; }; diff --git a/configs/comtrend_ct5361_ram_defconfig b/configs/comtrend_ct5361_ram_defconfig index 8b842606f5..0737772dd2 100644 --- a/configs/comtrend_ct5361_ram_defconfig +++ b/configs/comtrend_ct5361_ram_defconfig @@ -26,11 +26,14 @@ CONFIG_CMD_MEMINFO=y # CONFIG_CMD_FPGA is not set # CONFIG_CMD_LOADS is not set CONFIG_CMD_USB=y -# CONFIG_CMD_NET is not set # CONFIG_CMD_NFS is not set +CONFIG_CMD_MII=y +CONFIG_CMD_PING=y # CONFIG_CMD_MISC is not set CONFIG_OF_EMBED=y +CONFIG_NET_RANDOM_ETHADDR=y # CONFIG_DM_DEVICE_REMOVE is not set +CONFIG_BCM6348_IUDMA=y CONFIG_DM_GPIO=y CONFIG_BCM6345_GPIO=y CONFIG_LED=y @@ -38,6 +41,9 @@ CONFIG_LED_GPIO=y CONFIG_MTD=y CONFIG_MTD_NOR_FLASH=y CONFIG_CFI_FLASH=y +CONFIG_PHY_FIXED=y +CONFIG_DM_ETH=y +CONFIG_BCM6348_ETH=y CONFIG_PHY=y CONFIG_BCM6348_USBH_PHY=y CONFIG_DM_RESET=y From patchwork Mon Feb 12 16:38:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 872156 X-Patchwork-Delegate: daniel.schwierzeck@googlemail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="jVM7m+sb"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zgBQP6HWVz9sRW for ; Tue, 13 Feb 2018 03:46:37 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 7654EC21F01; Mon, 12 Feb 2018 16:44:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 494D3C21F4E; Mon, 12 Feb 2018 16:41:00 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 32B0FC21EFD; Mon, 12 Feb 2018 16:39:19 +0000 (UTC) Received: from mail-wr0-f195.google.com (mail-wr0-f195.google.com [209.85.128.195]) by lists.denx.de (Postfix) with ESMTPS id 6FA32C21F01 for ; Mon, 12 Feb 2018 16:39:15 +0000 (UTC) Received: by mail-wr0-f195.google.com with SMTP id o76so12730941wrb.7 for ; Mon, 12 Feb 2018 08:39:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=mgDi4unjw7zHi1vXsUgV0k6JZ2nrDwhLPXUSxDvoAL0=; b=jVM7m+sbPTyD3zh5fP2bSn4atUzUoCdCwoXU/oJNRF534meHN8uC+Pa/5Bpd8y5pVi l1B8+gP41GV++DI+IvXExiTOSpMWcmCwECuzDKhrcYddzMDvXjl8DxgPXJrqonQ+65m3 l9wwkHaiBTD17vABtD6Yqa5BH8kOGNMEE5B3ds+xYbbeAkmFDV4J2v7SguSniJiXUDYF Lw6VWub9QkykAsR7ko9DAlQWZVF2bSsU4IAFl+e0NntdHh+eBldixDT4Lpt/GuuORy2F sbRkBuJ5c15TVuYQxC3UGTwXYXkhkDH3ZuvemaXy/n9YWtLE2pqRBKhe1/BZ0pWNIC2E sxnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mgDi4unjw7zHi1vXsUgV0k6JZ2nrDwhLPXUSxDvoAL0=; b=odwxs2kwruXBuCZ48CgWZ48BMkcNyy9bvR5cwgt+UUzca6hATxrA2aM+uWoaou45b0 eo/5WgD1PFOgorDP2R4Wm1x0+f3JtP/gzjwkq5nhQ+XWormAMNZePM0YAhPloRj4mIFC OkeeGtpAmbxidS+hLI5dJm0xrRoPyn6UbECkOGQ3wd4idaSWxl/zKIEyFz8/3LFh3Pnq vFL5nd2dKBmmtBAfo1/UpI79rXsUng57Lleq3boGEoKc7oTJinSVCDXpwM8F2R7POQFJ IHWerc+ry+03zr2B/PXocUqKgjUgAXWOA71xfd2jDItMlA1FhtuisMIpcceJCV8LH8rZ bWhw== X-Gm-Message-State: APf1xPA9IrYV6HmSORpRr2oljh0TEzW8r+MRO7ZF0UOa56MKzr5e+LGl W0IIqyjd69buJANvRyCCFuyNUrs6 X-Google-Smtp-Source: AH8x225atIlFe4GCogzmfEE8Ey9PGSfnUjfnaDvL/HInR1BjCRooGHWWwA4bMJ8ZFlNuGHOa6rJiyw== X-Received: by 10.223.184.204 with SMTP id c12mr4697788wrg.253.1518453554934; Mon, 12 Feb 2018 08:39:14 -0800 (PST) Received: from skynet.lan (175.red-2-137-31.dynamicip.rima-tde.net. [2.137.31.175]) by smtp.gmail.com with ESMTPSA id j144sm5750202wmj.45.2018.02.12.08.39.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Feb 2018 08:39:14 -0800 (PST) From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= To: u-boot@lists.denx.de, sjg@chromium.org, daniel.schwierzeck@gmail.com, mugunthanvnm@ti.com, jteki@openedev.com Date: Mon, 12 Feb 2018 17:38:56 +0100 Message-Id: <20180212163858.25601-13-noltari@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180212163858.25601-1-noltari@gmail.com> References: <20180212163858.25601-1-noltari@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [RFC 12/14] bmips: bcm6358: add support for bcm6348-enet X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Signed-off-by: Álvaro Fernández Rojas --- arch/mips/dts/brcm,bcm6358.dtsi | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/arch/mips/dts/brcm,bcm6358.dtsi b/arch/mips/dts/brcm,bcm6358.dtsi index 1468e4f63a..04329864c2 100644 --- a/arch/mips/dts/brcm,bcm6358.dtsi +++ b/arch/mips/dts/brcm,bcm6358.dtsi @@ -193,6 +193,34 @@ status = "disabled"; }; + enet0: ethernet@fffe4000 { + compatible = "brcm,bcm6348-enet"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0xfffe4000 0x2dc>; + clocks = <&periph_clk BCM6358_CLK_ENET0>; + dmas = <&iudma BCM6358_DMA_ENET0_RX>, + <&iudma BCM6358_DMA_ENET0_TX>; + dma-names = "rx", + "tx"; + + status = "disabled"; + }; + + enet1: ethernet@fffe4800 { + compatible = "brcm,bcm6348-enet"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0xfffe4800 0x2dc>; + clocks = <&periph_clk BCM6358_CLK_ENET1>; + dmas = <&iudma BCM6358_DMA_ENET1_RX>, + <&iudma BCM6358_DMA_ENET1_TX>; + dma-names = "rx", + "tx"; + + status = "disabled"; + }; + iudma: dma-controller@fffe5000 { compatible = "brcm,bcm6348-iudma"; reg = <0xfffe5000 0x24>, From patchwork Mon Feb 12 16:38:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 872155 X-Patchwork-Delegate: daniel.schwierzeck@googlemail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="gdu/Uk+u"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zgBPz62B5z9sRW for ; Tue, 13 Feb 2018 03:46:15 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 65C7EC21F1A; Mon, 12 Feb 2018 16:44:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 15FBEC21F4D; Mon, 12 Feb 2018 16:40:58 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 4D1FDC21F48; Mon, 12 Feb 2018 16:39:19 +0000 (UTC) Received: from mail-wm0-f67.google.com (mail-wm0-f67.google.com [74.125.82.67]) by lists.denx.de (Postfix) with ESMTPS id 67686C21EE7 for ; Mon, 12 Feb 2018 16:39:16 +0000 (UTC) Received: by mail-wm0-f67.google.com with SMTP id f3so11108476wmc.1 for ; Mon, 12 Feb 2018 08:39:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NbLrbJGGFnh6FJYXvsG19061vnFbcjkXu6LJu9d31U8=; b=gdu/Uk+uhtwWrFG3P2GTXs4QzDgOrp0LqtO8/CECvWGugZ3AnpepsG8Rc2YoQckxeo TOgOn4FYSNXgbk/pNeua0jDFOio2wpA2uIgD3Ic8HxTJpXLnVpcyuOozBF7RUDDulxzV ucaPsY8rrUy83g4qtw6gspoo2HD9a2xxoj+GHKxxIBuuZKmKleUsbkgUbNobg7xthooF /dFktvgqNmrwPFexS+YHxdkC+9xvjtwHwqe78x+N8NmY3T5w71IuymPsF7ngwy/hF1/L m6Hvd2Vk00LH1my61y7RIIfkly9DmF8HGkLc3s7X53at+yk1imAl9OvjzAVz8ucus1kd 6vJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NbLrbJGGFnh6FJYXvsG19061vnFbcjkXu6LJu9d31U8=; b=pOix+OyocZ2RexX3VWtF9P0SxFb/X9gM5NDEe6eRYtBTMZqKbwS55CRA08fpjkbIUG vypSLheWM+JbWINxsDE71+2rV8paTFFTM4+9qr7N3WjnS5xp/UGaPRY/JcFlGF61BWpZ VrRnO8dS2gefazGITleJbLY8FU4ZBPQ4ld2tosg++jFNRmwl88Kx67RbuuW2swBS65g4 SN5B7t8Sv8snBulyh/n2q5rSohtWsrZOpM86RMYh9wXKVo6vBaMRBZEF0EtzKlWoWxAm PHFCekZtv44hHlJDxqRXY5bMmdmiwgv0X+50J6oSmcCTAnLWSOCRkdCehRjCXcWXrIxM sVGA== X-Gm-Message-State: APf1xPD283FBOqaZ2g2slwehQy3MJS5dGFAnXA1wdnJcaWco/gioCyy5 +uHN33N1hTWKsJy73bPqB+wmH0PY X-Google-Smtp-Source: AH8x225Z9BQuQyuiWrJcYfkgMs7Wu/jdOYZryBmT+IugS3KYqkj9MrnxYOnU9WLU3MDLPvtFt4pxdw== X-Received: by 10.28.55.81 with SMTP id e78mr4320001wma.50.1518453555902; Mon, 12 Feb 2018 08:39:15 -0800 (PST) Received: from skynet.lan (175.red-2-137-31.dynamicip.rima-tde.net. [2.137.31.175]) by smtp.gmail.com with ESMTPSA id j144sm5750202wmj.45.2018.02.12.08.39.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Feb 2018 08:39:15 -0800 (PST) From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= To: u-boot@lists.denx.de, sjg@chromium.org, daniel.schwierzeck@gmail.com, mugunthanvnm@ti.com, jteki@openedev.com Date: Mon, 12 Feb 2018 17:38:57 +0100 Message-Id: <20180212163858.25601-14-noltari@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180212163858.25601-1-noltari@gmail.com> References: <20180212163858.25601-1-noltari@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [RFC 13/14] bmips: enable hg556a enet support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Signed-off-by: Álvaro Fernández Rojas --- arch/mips/dts/huawei,hg556a.dts | 12 ++++++++++++ configs/huawei_hg556a_ram_defconfig | 8 +++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/arch/mips/dts/huawei,hg556a.dts b/arch/mips/dts/huawei,hg556a.dts index a1e9c15ab9..2f99e0905c 100644 --- a/arch/mips/dts/huawei,hg556a.dts +++ b/arch/mips/dts/huawei,hg556a.dts @@ -94,6 +94,18 @@ status = "okay"; }; +&enet1 { + status = "okay"; + phy = <&enet1phy>; + phy-mode = "mii"; + + enet1phy: fixed-link { + reg = <1>; + speed = <100>; + full-duplex; + }; +}; + &gpio0 { status = "okay"; }; diff --git a/configs/huawei_hg556a_ram_defconfig b/configs/huawei_hg556a_ram_defconfig index 7f7f34ed61..c7c7c6554f 100644 --- a/configs/huawei_hg556a_ram_defconfig +++ b/configs/huawei_hg556a_ram_defconfig @@ -26,11 +26,14 @@ CONFIG_CMD_MEMINFO=y # CONFIG_CMD_FPGA is not set # CONFIG_CMD_LOADS is not set CONFIG_CMD_USB=y -# CONFIG_CMD_NET is not set # CONFIG_CMD_NFS is not set +CONFIG_CMD_MII=y +CONFIG_CMD_PING=y # CONFIG_CMD_MISC is not set CONFIG_OF_EMBED=y +CONFIG_NET_RANDOM_ETHADDR=y # CONFIG_DM_DEVICE_REMOVE is not set +CONFIG_BCM6348_IUDMA=y CONFIG_DM_GPIO=y CONFIG_BCM6345_GPIO=y CONFIG_LED=y @@ -38,6 +41,9 @@ CONFIG_LED_GPIO=y CONFIG_MTD=y CONFIG_MTD_NOR_FLASH=y CONFIG_CFI_FLASH=y +CONFIG_PHY_FIXED=y +CONFIG_DM_ETH=y +CONFIG_BCM6348_ETH=y CONFIG_PHY=y CONFIG_BCM6358_USBH_PHY=y CONFIG_DM_RESET=y From patchwork Mon Feb 12 16:38:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 872162 X-Patchwork-Delegate: daniel.schwierzeck@googlemail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="QOhAsKZL"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zgBV93QRWz9sRW for ; Tue, 13 Feb 2018 03:49:53 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 35135C21F18; Mon, 12 Feb 2018 16:44:11 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id BB9A5C21F0B; Mon, 12 Feb 2018 16:40:55 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 36289C21EAE; Mon, 12 Feb 2018 16:39:21 +0000 (UTC) Received: from mail-wr0-f194.google.com (mail-wr0-f194.google.com [209.85.128.194]) by lists.denx.de (Postfix) with ESMTPS id 92F85C21D8A for ; Mon, 12 Feb 2018 16:39:17 +0000 (UTC) Received: by mail-wr0-f194.google.com with SMTP id k32so9361500wrk.4 for ; Mon, 12 Feb 2018 08:39:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2HAIlGwBIbztkkToAsaHEZISzeL+JoD3oUyJzubwJhI=; b=QOhAsKZL3zhHumtA26hCRfB/62wmPy+0UkICz7Fj2y77/RnxlrBy3K6mx+XuyUaRf0 9HM+7egebrMu6QdJ3NRA0ns/pFt9wYdsbb5N1+J5HpnICPZUMND7dCsD5RQQOdxpN1Zy nJphBYKtpqVqqMKzHYjllWlqeH89iKbKdMJn/lh/dnxu1SPkY8cymOGzotQDzMhjjy5f pl0vrY7S4PBbmK/v53ojjbkfPPkuEHkDYMgeMeS0Y97D/mbjn1yS91oD2Iop7z2p+WMI genLSC6aD+m8Q962WmsWa3PUjvH9eRy9BbxWQ4ziZUveaqqtiF+U5e4xK0j3xwJ9udji kcrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2HAIlGwBIbztkkToAsaHEZISzeL+JoD3oUyJzubwJhI=; b=XtOhVb8CG6ji8P+M2G28uXrczd+qSukTtE5n0WRL/S5bn6qETa3jfPlTUg/cdr6yNH 76GVf6P1YhCdxHiTl5BgDZj/XpYZvyvMrxQu3KmodtFiTAy8Rhykrwz5qUlOZFhjas2K HH9LXQfw3JpqxQFNM37kK3BiIBL24kT/TgMh7Neq1Vex7fH5ZzG7DAeHv6kolgqBvG7Z 3K00fgWCDM1HP7Oy3+lMAFYu0P4Ku0uYC9tFp1Pev5lFj6O6z30j5rWpqHCP39HPS/a4 0kq+A40Kf4yVr+PffdwkmXrJWbRy5IhIGP6O7ymlWwurBSDVObTgtuKKPt+u5IGI2rPA ooCg== X-Gm-Message-State: APf1xPA3JAuc6xNkrssG76K7Jr4ZNwE9b0IvT/wWlv2W01+i9+sahbz4 FCZj9YsRHYdi7dkpth+zkYrko5Ug X-Google-Smtp-Source: AH8x225qWWsLHqASwraxSYx6nTBZwj7pr2bHbWt3+g5r6PPqfmW9VFCiRrdaKmzU8Y9OwszN+LqiTQ== X-Received: by 10.223.160.27 with SMTP id k27mr10290678wrk.5.1518453556934; Mon, 12 Feb 2018 08:39:16 -0800 (PST) Received: from skynet.lan (175.red-2-137-31.dynamicip.rima-tde.net. [2.137.31.175]) by smtp.gmail.com with ESMTPSA id j144sm5750202wmj.45.2018.02.12.08.39.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Feb 2018 08:39:16 -0800 (PST) From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= To: u-boot@lists.denx.de, sjg@chromium.org, daniel.schwierzeck@gmail.com, mugunthanvnm@ti.com, jteki@openedev.com Date: Mon, 12 Feb 2018 17:38:58 +0100 Message-Id: <20180212163858.25601-15-noltari@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180212163858.25601-1-noltari@gmail.com> References: <20180212163858.25601-1-noltari@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [RFC 14/14] bmips: enable nb4-ser enet support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Signed-off-by: Álvaro Fernández Rojas --- arch/mips/dts/sfr,nb4-ser.dts | 24 ++++++++++++++++++++++++ configs/sfr_nb4-ser_ram_defconfig | 8 +++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/arch/mips/dts/sfr,nb4-ser.dts b/arch/mips/dts/sfr,nb4-ser.dts index 473372faa1..73db45f9ea 100644 --- a/arch/mips/dts/sfr,nb4-ser.dts +++ b/arch/mips/dts/sfr,nb4-ser.dts @@ -54,6 +54,30 @@ status = "okay"; }; +&enet0 { + status = "okay"; + phy = <&enet0phy>; + phy-mode = "internal"; + + enet0phy: fixed-link { + reg = <1>; + speed = <100>; + full-duplex; + }; +}; + +&enet1 { + status = "okay"; + phy = <&enet1phy>; + phy-mode = "mii"; + + enet1phy: fixed-link { + reg = <1>; + speed = <100>; + full-duplex; + }; +}; + &gpio0 { status = "okay"; }; diff --git a/configs/sfr_nb4-ser_ram_defconfig b/configs/sfr_nb4-ser_ram_defconfig index fc323d879d..07b49a1a77 100644 --- a/configs/sfr_nb4-ser_ram_defconfig +++ b/configs/sfr_nb4-ser_ram_defconfig @@ -27,11 +27,14 @@ CONFIG_CMD_MEMINFO=y # CONFIG_CMD_FPGA is not set # CONFIG_CMD_LOADS is not set CONFIG_CMD_USB=y -# CONFIG_CMD_NET is not set # CONFIG_CMD_NFS is not set +CONFIG_CMD_MII=y +CONFIG_CMD_PING=y # CONFIG_CMD_MISC is not set CONFIG_OF_EMBED=y +CONFIG_NET_RANDOM_ETHADDR=y # CONFIG_DM_DEVICE_REMOVE is not set +CONFIG_BCM6348_IUDMA=y CONFIG_DM_GPIO=y CONFIG_BCM6345_GPIO=y CONFIG_LED=y @@ -40,6 +43,9 @@ CONFIG_LED_GPIO=y CONFIG_MTD=y CONFIG_MTD_NOR_FLASH=y CONFIG_CFI_FLASH=y +CONFIG_PHY_FIXED=y +CONFIG_DM_ETH=y +CONFIG_BCM6348_ETH=y CONFIG_PHY=y CONFIG_BCM6358_USBH_PHY=y CONFIG_DM_RESET=y From patchwork Tue Feb 20 17:46:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 875724 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Irmn37Rb"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zmDY446hQz9s21 for ; Wed, 21 Feb 2018 08:39:52 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id D46EDC21F07; Tue, 20 Feb 2018 17:52:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 38FFAC21F3C; Tue, 20 Feb 2018 17:48:47 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id DF1A0C21F3C; Tue, 20 Feb 2018 17:47:25 +0000 (UTC) Received: from mail-wr0-f194.google.com (mail-wr0-f194.google.com [209.85.128.194]) by lists.denx.de (Postfix) with ESMTPS id ED641C21D8A for ; Tue, 20 Feb 2018 17:47:21 +0000 (UTC) Received: by mail-wr0-f194.google.com with SMTP id k9so16791001wre.9 for ; Tue, 20 Feb 2018 09:47:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Q7mtVZLRTEE3LMzkVSFD7JDraNl3/6rEUbWc42hxEug=; b=Irmn37Rbz/zGWTmuLraIxzU1baFLvR6iVfWH4w/OZ39FtI6UrxrY8+L4PJEbdDudwK k4MXMx8sh8y74o9yXmIwVenO1Rzo7s1Vzfj3CUJg2tZ6dBdHXd+hALkY4DADunxoXOzS K9rlsA7tU/okTDSY0YC7HYX4CZqXwbbbBasrLVXnVnvHwILxaRpGUZ0OK67XQL8Fb8u/ LakvsklmRa//oqrUTCQgbAD30C+WkVFFmWgncw0xkI1jqo/6uWS2M5ZqNnwS0uGp7fwS cYw6jO/lW9wbLIij4+MMGWqOFCdvApK71UbGySXYuDQGFgvEMjWY36ZgiqnEmnq8hPhu GRtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Q7mtVZLRTEE3LMzkVSFD7JDraNl3/6rEUbWc42hxEug=; b=FlWxMVgfUu6lbYRvkZc6P+2J2LCKH42Tp4AeOsWT7I/dz2ojYJIQ6TnoQ6O0QOKjgL fUEBp5NTpep2hiBGIkE9CDyE1j4RypfQcnCRd+2eE/Rxw3GVNstSfKVCXEffoHV5fr1p 5uY3O0EUCx+fNVAPcH3sEIEffOqddg4z5VVpLOlErUTnWTK1rH6/9StjVjDDhr4mJRbl hcwZe2v375y/LxcUv07k98SIcxP699iBqPT4dJ5J6eColJKR/vvVoTvLmaQmoUld4n/a G8CR8hQu8STlHIov7eKt87I09JSYef7KUC8Vt3/qEqnz1AfJ89t9BdCyCq1mzpGm4e5v U6wg== X-Gm-Message-State: APf1xPClaEExUH8+WkC2eD84k/OgBOETe5iwHWNJHhlqc88VlGXERg+T iqHZRMiX/iViH0V0rY6ENkR+udSn X-Google-Smtp-Source: AH8x224HW67QeO4/1aQej9P7yQ4j+Uk3J+P/RRhQti33P8ZTPxALvI3pmPSw5CMXUeAmbA1DFGghGg== X-Received: by 10.223.166.135 with SMTP id t7mr405727wrc.260.1519148841452; Tue, 20 Feb 2018 09:47:21 -0800 (PST) Received: from skynet.lan (175.red-2-137-31.dynamicip.rima-tde.net. [2.137.31.175]) by smtp.gmail.com with ESMTPSA id 27sm26735298wry.5.2018.02.20.09.47.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 20 Feb 2018 09:47:20 -0800 (PST) From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= To: u-boot@lists.denx.de, daniel.schwierzeck@gmail.com, sjg@chromium.org, jagan@openedev.com, vigneshr@ti.com Date: Tue, 20 Feb 2018 18:46:57 +0100 Message-Id: <20180220174657.4000-16-noltari@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180220174657.4000-1-noltari@gmail.com> References: <20180212163858.25601-1-noltari@gmail.com> <20180220174657.4000-1-noltari@gmail.com> MIME-Version: 1.0 Subject: [U-Boot] [RFC v2 15/15] bmips: enable nb4-ser enet support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" Signed-off-by: Álvaro Fernández Rojas --- v2: no changes arch/mips/dts/sfr,nb4-ser.dts | 24 ++++++++++++++++++++++++ configs/sfr_nb4-ser_ram_defconfig | 8 +++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/arch/mips/dts/sfr,nb4-ser.dts b/arch/mips/dts/sfr,nb4-ser.dts index 473372faa1..73db45f9ea 100644 --- a/arch/mips/dts/sfr,nb4-ser.dts +++ b/arch/mips/dts/sfr,nb4-ser.dts @@ -54,6 +54,30 @@ status = "okay"; }; +&enet0 { + status = "okay"; + phy = <&enet0phy>; + phy-mode = "internal"; + + enet0phy: fixed-link { + reg = <1>; + speed = <100>; + full-duplex; + }; +}; + +&enet1 { + status = "okay"; + phy = <&enet1phy>; + phy-mode = "mii"; + + enet1phy: fixed-link { + reg = <1>; + speed = <100>; + full-duplex; + }; +}; + &gpio0 { status = "okay"; }; diff --git a/configs/sfr_nb4-ser_ram_defconfig b/configs/sfr_nb4-ser_ram_defconfig index fc323d879d..07b49a1a77 100644 --- a/configs/sfr_nb4-ser_ram_defconfig +++ b/configs/sfr_nb4-ser_ram_defconfig @@ -27,11 +27,14 @@ CONFIG_CMD_MEMINFO=y # CONFIG_CMD_FPGA is not set # CONFIG_CMD_LOADS is not set CONFIG_CMD_USB=y -# CONFIG_CMD_NET is not set # CONFIG_CMD_NFS is not set +CONFIG_CMD_MII=y +CONFIG_CMD_PING=y # CONFIG_CMD_MISC is not set CONFIG_OF_EMBED=y +CONFIG_NET_RANDOM_ETHADDR=y # CONFIG_DM_DEVICE_REMOVE is not set +CONFIG_BCM6348_IUDMA=y CONFIG_DM_GPIO=y CONFIG_BCM6345_GPIO=y CONFIG_LED=y @@ -40,6 +43,9 @@ CONFIG_LED_GPIO=y CONFIG_MTD=y CONFIG_MTD_NOR_FLASH=y CONFIG_CFI_FLASH=y +CONFIG_PHY_FIXED=y +CONFIG_DM_ETH=y +CONFIG_BCM6348_ETH=y CONFIG_PHY=y CONFIG_BCM6358_USBH_PHY=y CONFIG_DM_RESET=y