All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ramon Fried <rfried.dev@gmail.com>
To: Weijie Gao <weijie.gao@mediatek.com>
Cc: U-Boot Mailing List <u-boot@lists.denx.de>,
	 GSS_MTK_Uboot_upstream <GSS_MTK_Uboot_upstream@mediatek.com>,
	 Joe Hershberger <joe.hershberger@ni.com>
Subject: Re: [PATCH 07/31] net: mediatek: stop using bitfileds for DMA descriptors
Date: Sat, 6 Aug 2022 20:50:49 +0300	[thread overview]
Message-ID: <CAGi-RU+B8hNiq9BEKEt7-PKexoSYB2h6t3o1OT3ZP70jWkt98g@mail.gmail.com> (raw)
In-Reply-To: <437b660550e52d59f2d2c94e876324634a71fea7.1659581119.git.weijie.gao@mediatek.com>

On Thu, Aug 4, 2022 at 6:35 AM Weijie Gao <weijie.gao@mediatek.com> wrote:
>
> This patch is a preparation for adding a new version of PDMA of which the
> DMA descriptor fields has changed. Using bitfields will result in a complex
> modification. Convert bitfields to u32 units can solve this problem easily.
>
> Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
> ---
>  drivers/net/mtk_eth.c | 144 ++++++++++++++----------------------------
>  drivers/net/mtk_eth.h |  32 ++++++++++
>  2 files changed, 80 insertions(+), 96 deletions(-)
>
> diff --git a/drivers/net/mtk_eth.c b/drivers/net/mtk_eth.c
> index 92d2ea4f2a..bfa049cf79 100644
> --- a/drivers/net/mtk_eth.c
> +++ b/drivers/net/mtk_eth.c
> @@ -65,77 +65,6 @@
>         (DP_DISCARD << MC_DP_S) | \
>         (DP_DISCARD << UN_DP_S))
>
> -struct pdma_rxd_info1 {
> -       u32 PDP0;
> -};
> -
> -struct pdma_rxd_info2 {
> -       u32 PLEN1 : 14;
> -       u32 LS1 : 1;
> -       u32 UN_USED : 1;
> -       u32 PLEN0 : 14;
> -       u32 LS0 : 1;
> -       u32 DDONE : 1;
> -};
> -
> -struct pdma_rxd_info3 {
> -       u32 PDP1;
> -};
> -
> -struct pdma_rxd_info4 {
> -       u32 FOE_ENTRY : 14;
> -       u32 CRSN : 5;
> -       u32 SP : 3;
> -       u32 L4F : 1;
> -       u32 L4VLD : 1;
> -       u32 TACK : 1;
> -       u32 IP4F : 1;
> -       u32 IP4 : 1;
> -       u32 IP6 : 1;
> -       u32 UN_USED : 4;
> -};
> -
> -struct pdma_rxdesc {
> -       struct pdma_rxd_info1 rxd_info1;
> -       struct pdma_rxd_info2 rxd_info2;
> -       struct pdma_rxd_info3 rxd_info3;
> -       struct pdma_rxd_info4 rxd_info4;
> -};
> -
> -struct pdma_txd_info1 {
> -       u32 SDP0;
> -};
> -
> -struct pdma_txd_info2 {
> -       u32 SDL1 : 14;
> -       u32 LS1 : 1;
> -       u32 BURST : 1;
> -       u32 SDL0 : 14;
> -       u32 LS0 : 1;
> -       u32 DDONE : 1;
> -};
> -
> -struct pdma_txd_info3 {
> -       u32 SDP1;
> -};
> -
> -struct pdma_txd_info4 {
> -       u32 VLAN_TAG : 16;
> -       u32 INS : 1;
> -       u32 RESV : 2;
> -       u32 UDF : 6;
> -       u32 FPORT : 3;
> -       u32 TSO : 1;
> -       u32 TUI_CO : 3;
> -};
> -
> -struct pdma_txdesc {
> -       struct pdma_txd_info1 txd_info1;
> -       struct pdma_txd_info2 txd_info2;
> -       struct pdma_txd_info3 txd_info3;
> -       struct pdma_txd_info4 txd_info4;
> -};
> -
>  enum mtk_switch {
>         SW_NONE,
>         SW_MT7530,
> @@ -145,13 +74,15 @@ enum mtk_switch {
>  struct mtk_soc_data {
>         u32 caps;
>         u32 ana_rgc3;
> +       u32 txd_size;
> +       u32 rxd_size;
>  };
>
>  struct mtk_eth_priv {
>         char pkt_pool[TOTAL_PKT_BUF_SIZE] __aligned(ARCH_DMA_MINALIGN);
>
> -       struct pdma_txdesc *tx_ring_noc;
> -       struct pdma_rxdesc *rx_ring_noc;
> +       void *tx_ring_noc;
> +       void *rx_ring_noc;
>
>         int rx_dma_owner_idx0;
>         int tx_cpu_owner_idx0;
> @@ -1196,14 +1127,16 @@ static void mtk_mac_init(struct mtk_eth_priv *priv)
>  static void mtk_eth_fifo_init(struct mtk_eth_priv *priv)
>  {
>         char *pkt_base = priv->pkt_pool;
> +       struct mtk_tx_dma *txd;
> +       struct mtk_rx_dma *rxd;
>         int i;
>
>         mtk_pdma_rmw(priv, PDMA_GLO_CFG_REG, 0xffff0000, 0);
>         udelay(500);
>
> -       memset(priv->tx_ring_noc, 0, NUM_TX_DESC * sizeof(struct pdma_txdesc));
> -       memset(priv->rx_ring_noc, 0, NUM_RX_DESC * sizeof(struct pdma_rxdesc));
> -       memset(priv->pkt_pool, 0, TOTAL_PKT_BUF_SIZE);
> +       memset(priv->tx_ring_noc, 0, NUM_TX_DESC * priv->soc->txd_size);
> +       memset(priv->rx_ring_noc, 0, NUM_RX_DESC * priv->soc->rxd_size);
> +       memset(priv->pkt_pool, 0xff, TOTAL_PKT_BUF_SIZE);
>
>         flush_dcache_range((ulong)pkt_base,
>                            (ulong)(pkt_base + TOTAL_PKT_BUF_SIZE));
> @@ -1212,17 +1145,21 @@ static void mtk_eth_fifo_init(struct mtk_eth_priv
>  *priv)
>         priv->tx_cpu_owner_idx0 = 0;
>
>         for (i = 0; i < NUM_TX_DESC; i++) {
> -               priv->tx_ring_noc[i].txd_info2.LS0 = 1;
> -               priv->tx_ring_noc[i].txd_info2.DDONE = 1;
> -               priv->tx_ring_noc[i].txd_info4.FPORT = priv->gmac_id + 1;
> +               txd = priv->tx_ring_noc + i * priv->soc->txd_size;
> +
> +               txd->txd1 = virt_to_phys(pkt_base);
> +               txd->txd2 = PDMA_TXD2_DDONE | PDMA_TXD2_LS0;
> +               txd->txd4 = PDMA_TXD4_FPORT_SET(priv->gmac_id + 1);
>
> -               priv->tx_ring_noc[i].txd_info1.SDP0 = virt_to_phys(pkt_base);
>                 pkt_base += PKTSIZE_ALIGN;
>         }
>
>         for (i = 0; i < NUM_RX_DESC; i++) {
> -               priv->rx_ring_noc[i].rxd_info2.PLEN0 = PKTSIZE_ALIGN;
> -               priv->rx_ring_noc[i].rxd_info1.PDP0 = virt_to_phys(pkt_base);
> +               rxd = priv->rx_ring_noc + i * priv->soc->rxd_size;
> +
> +               rxd->rxd1 = virt_to_phys(pkt_base);
> +               rxd->rxd2 = PDMA_RXD2_PLEN0_SET(PKTSIZE_ALIGN);
> +
>                 pkt_base += PKTSIZE_ALIGN;
>         }
>
> @@ -1309,20 +1246,22 @@ static int mtk_eth_send(struct udevice *dev, void
>  *packet, int length)
>  {
>         struct mtk_eth_priv *priv = dev_get_priv(dev);
>         u32 idx = priv->tx_cpu_owner_idx0;
> +       struct mtk_tx_dma *txd;
>         void *pkt_base;
>
> -       if (!priv->tx_ring_noc[idx].txd_info2.DDONE) {
> +       txd = priv->tx_ring_noc + idx * priv->soc->txd_size;
> +
> +       if (!(txd->txd2 & PDMA_TXD2_DDONE)) {
>                 debug("mtk-eth: TX DMA descriptor ring is full\n");
>                 return -EPERM;
>         }
>
> -       pkt_base = (void *)phys_to_virt(priv->tx_ring_noc[idx].txd_info1.SDP0);
> +       pkt_base = (void *)phys_to_virt(txd->txd1);
>         memcpy(pkt_base, packet, length);
>         flush_dcache_range((ulong)pkt_base, (ulong)pkt_base +
>                            roundup(length, ARCH_DMA_MINALIGN));
>
> -       priv->tx_ring_noc[idx].txd_info2.SDL0 = length;
> -       priv->tx_ring_noc[idx].txd_info2.DDONE = 0;
> +       txd->txd2 = PDMA_TXD2_LS0 | PDMA_TXD2_SDL0_SET(length);
>
>         priv->tx_cpu_owner_idx0 = (priv->tx_cpu_owner_idx0 + 1) % NUM_TX_DESC;
>         mtk_pdma_write(priv, TX_CTX_IDX_REG(0), priv->tx_cpu_owner_idx0);
> @@ -1334,16 +1273,20 @@ static int mtk_eth_recv(struct udevice *dev, int
>  flags, uchar **packetp)
>  {
>         struct mtk_eth_priv *priv = dev_get_priv(dev);
>         u32 idx = priv->rx_dma_owner_idx0;
> +       struct mtk_rx_dma *rxd;
>         uchar *pkt_base;
>         u32 length;
>
> -       if (!priv->rx_ring_noc[idx].rxd_info2.DDONE) {
> +       rxd = priv->rx_ring_noc + idx * priv->soc->rxd_size;
> +
> +       if (!(rxd->rxd2 & PDMA_RXD2_DDONE)) {
>                 debug("mtk-eth: RX DMA descriptor ring is empty\n");
>                 return -EAGAIN;
>         }
>
> -       length = priv->rx_ring_noc[idx].rxd_info2.PLEN0;
> -       pkt_base = (void *)phys_to_virt(priv->rx_ring_noc[idx].rxd_info1.PDP0);
> +       length = PDMA_RXD2_PLEN0_GET(rxd->rxd2);
> +
> +       pkt_base = (void *)phys_to_virt(rxd->rxd1);
>         invalidate_dcache_range((ulong)pkt_base, (ulong)pkt_base +
>                                 roundup(length, ARCH_DMA_MINALIGN));
>
> @@ -1357,10 +1300,11 @@ static int mtk_eth_free_pkt(struct udevice *dev,
>  uchar *packet, int length)
>  {
>         struct mtk_eth_priv *priv = dev_get_priv(dev);
>         u32 idx = priv->rx_dma_owner_idx0;
> +       struct mtk_rx_dma *rxd;
> +
> +       rxd = priv->rx_ring_noc + idx * priv->soc->rxd_size;
>
> -       priv->rx_ring_noc[idx].rxd_info2.DDONE = 0;
> -       priv->rx_ring_noc[idx].rxd_info2.LS0 = 0;
> -       priv->rx_ring_noc[idx].rxd_info2.PLEN0 = PKTSIZE_ALIGN;
> +       rxd->rxd2 = PDMA_RXD2_PLEN0_SET(PKTSIZE_ALIGN);
>
>         mtk_pdma_write(priv, RX_CRX_IDX_REG(0), idx);
>         priv->rx_dma_owner_idx0 = (priv->rx_dma_owner_idx0 + 1) % NUM_RX_DESC;
> @@ -1387,11 +1331,11 @@ static int mtk_eth_probe(struct udevice *dev)
>                 return ret;
>
>         /* Prepare for tx/rx rings */
> -       priv->tx_ring_noc = (struct pdma_txdesc *)
> -               noncached_alloc(sizeof(struct pdma_txdesc) * NUM_TX_DESC,
> +       priv->tx_ring_noc = (void *)
> +               noncached_alloc(priv->soc->txd_size * NUM_TX_DESC,
>                                 ARCH_DMA_MINALIGN);
> -       priv->rx_ring_noc = (struct pdma_rxdesc *)
> -               noncached_alloc(sizeof(struct pdma_rxdesc) * NUM_RX_DESC,
> +       priv->rx_ring_noc = (void *)
> +               noncached_alloc(priv->soc->rxd_size * NUM_RX_DESC,
>                                 ARCH_DMA_MINALIGN);
>
>         /* Set MAC mode */
> @@ -1548,18 +1492,26 @@ static int mtk_eth_of_to_plat(struct udevice *dev)
>
>  static const struct mtk_soc_data mt7629_data = {
>         .ana_rgc3 = 0x128,
> +       .txd_size = sizeof(struct mtk_tx_dma),
> +       .rxd_size = sizeof(struct mtk_rx_dma),
>  };
>
>  static const struct mtk_soc_data mt7623_data = {
>         .caps = MT7623_CAPS,
> +       .txd_size = sizeof(struct mtk_tx_dma),
> +       .rxd_size = sizeof(struct mtk_rx_dma),
>  };
>
>  static const struct mtk_soc_data mt7622_data = {
>         .ana_rgc3 = 0x2028,
> +       .txd_size = sizeof(struct mtk_tx_dma),
> +       .rxd_size = sizeof(struct mtk_rx_dma),
>  };
>
>  static const struct mtk_soc_data mt7621_data = {
>         .caps = MT7621_CAPS,
> +       .txd_size = sizeof(struct mtk_tx_dma),
> +       .rxd_size = sizeof(struct mtk_rx_dma),
>  };
>
>  static const struct udevice_id mtk_eth_ids[] = {
> diff --git a/drivers/net/mtk_eth.h b/drivers/net/mtk_eth.h
> index 15c2030617..65bc9fcc04 100644
> --- a/drivers/net/mtk_eth.h
> +++ b/drivers/net/mtk_eth.h
> @@ -10,6 +10,7 @@
>  #define _MTK_ETH_H_
>
>  #include <linux/bitops.h>
> +#include <linux/bitfield.h>
>
>  enum mkt_eth_capabilities {
>         MTK_TRGMII_BIT,
> @@ -435,4 +436,35 @@ enum mkt_eth_capabilities {
>  #define PHY_POWER_SAVING_M             0x300
>  #define PHY_POWER_SAVING_TX            0x0
>
> +/* PDMA descriptors */
> +struct mtk_rx_dma {
> +       unsigned int rxd1;
> +       unsigned int rxd2;
> +       unsigned int rxd3;
> +       unsigned int rxd4;
> +} __packed __aligned(4);
> +
> +struct mtk_tx_dma {
> +       unsigned int txd1;
> +       unsigned int txd2;
> +       unsigned int txd3;
> +       unsigned int txd4;
> +} __packed __aligned(4);
> +
> +/* PDMA TXD fields */
> +#define PDMA_TXD2_DDONE                        BIT(31)
> +#define PDMA_TXD2_LS0                  BIT(30)
> +#define PDMA_TXD2_SDL0_M               GENMASK(29, 16)
> +#define PDMA_TXD2_SDL0_SET(_v) FIELD_PREP(PDMA_TXD2_SDL0_M, (_v))
> +
> +#define PDMA_TXD4_FPORT_M              GENMASK(27, 25)
> +#define PDMA_TXD4_FPORT_SET(_v)        FIELD_PREP(PDMA_TXD4_FPORT_M, (_v))
> +
> +/* PDMA RXD fields */
> +#define PDMA_RXD2_DDONE                        BIT(31)
> +#define PDMA_RXD2_LS0                  BIT(30)
> +#define PDMA_RXD2_PLEN0_M              GENMASK(29, 16)
> +#define PDMA_RXD2_PLEN0_GET(_v)        FIELD_GET(PDMA_RXD2_PLEN0_M, (_v))
> +#define PDMA_RXD2_PLEN0_SET(_v)        FIELD_PREP(PDMA_RXD2_PLEN0_M, (_v))
> +
>  #endif /* _MTK_ETH_H_ */
> --
> 2.17.1
>
Commit topic has typo in fields

  parent reply	other threads:[~2022-08-06 17:51 UTC|newest]

Thread overview: 100+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-04  3:34 [PATCH 00/31] Add support for MediaTek MT7981/MT7986 SoCs Weijie Gao
2022-08-04  3:34 ` [PATCH 01/31] arm: mediatek: add support for MediaTek MT7986 SoC Weijie Gao
2022-08-04  8:37   ` Daniel Golle
2022-08-04  8:50     ` Weijie Gao
2022-08-05  8:43       ` Weijie Gao
2022-08-06 16:09         ` Daniel Golle
2022-08-08  1:37           ` Weijie Gao
2022-08-04  3:34 ` [PATCH 02/31] arm: mediatek: add support for MediaTek MT7981 SoC Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-08  2:17     ` Weijie Gao
2022-08-08 19:26       ` Simon Glass
2022-08-04  3:35 ` [PATCH 03/31] board: mediatek: add MT7986 reference boards Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-09  9:10   ` Daniel Golle
2022-08-12 11:02     ` Weijie Gao
2022-08-12 11:29       ` Daniel Golle
2022-08-04  3:35 ` [PATCH 04/31] board: mediatek: add MT7981 " Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-04  3:35 ` [PATCH 05/31] mmc: mediatek: add support for MediaTek MT7891/MT7986 SoCs Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-08  2:22     ` Weijie Gao
2022-08-11  5:50   ` jh80.chung
2022-08-04  3:35 ` [PATCH 06/31] net: mediatek: use a struct to cover variations of all SoCs Weijie Gao
2022-08-04 13:56   ` Simon Glass
2022-08-08  2:28     ` Weijie Gao
2022-08-04  3:35 ` [PATCH 07/31] net: mediatek: stop using bitfileds for DMA descriptors Weijie Gao
2022-08-04 13:56   ` Simon Glass
2022-08-06 17:50   ` Ramon Fried [this message]
2022-08-08  2:29     ` Weijie Gao
2022-08-04  3:35 ` [PATCH 08/31] net: mediatek: add support for PDMA v2 Weijie Gao
2022-08-04 13:56   ` Simon Glass
2022-08-06 17:49     ` Ramon Fried
2022-08-04  3:35 ` [PATCH 09/31] net: mediatek: add support for MediaTek MT7981/MT7986 Weijie Gao
2022-08-06 17:48   ` Ramon Fried
2022-08-04  3:35 ` [PATCH 10/31] serial: mtk: add support for using dynamic baud clock souce Weijie Gao
2022-08-04 13:56   ` Simon Glass
2022-08-08  2:36     ` Weijie Gao
2022-08-08 19:26       ` Simon Glass
2022-08-04  3:35 ` [PATCH 11/31] arm: dts: mt7622: force high-speed mode for uart Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-04  3:35 ` [PATCH 12/31] pwm: mtk: add support for MediaTek MT7986 SoC Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-04  3:35 ` [PATCH 13/31] pwm: mtk: add support for MediaTek MT7981 SoC Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-04  3:35 ` [PATCH 14/31] timer: mtk: add support for MediaTek MT7981/MT7986 SoCs Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-04  3:35 ` [PATCH 15/31] watchdog: mediatek: add support for MediaTek MT7986 SoC Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-04  3:36 ` [PATCH 16/31] spi: add support for MediaTek spi-mem controller Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-04  3:36 ` [PATCH 17/31] i2c: add support for MediaTek I2C interface Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-08  3:00     ` Weijie Gao
2022-08-10 11:12   ` Heiko Schocher
2022-08-10 11:24   ` Michael Nazzareno Trimarchi
2022-08-12  9:46     ` Weijie Gao
2022-08-04  3:36 ` [PATCH 18/31] arm: dts: mt7622: add i2c support Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-04  3:36 ` [PATCH 19/31] dt-bindings: pinctrl: mediatek: add a header for common pinconf parameters Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-04  3:36 ` [PATCH 20/31] pinctrl: mediatek: add pinctrl driver for MT7981 SoC Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-04  3:36 ` [PATCH 21/31] pinctrl: mediatek: add pinctrl driver for MT7986 SoC Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-04  3:36 ` [PATCH 22/31] clk: mediatek: add CLK_BYPASS_XTAL flag to allow bypassing searching clock parent of xtal clock Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-08  3:01     ` Weijie Gao
2022-08-04  3:36 ` [PATCH 23/31] clk: mediatek: add support to configure clock driver parent Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-13  4:18   ` Sean Anderson
2022-08-23 10:43     ` Weijie Gao
2022-08-04  3:36 ` [PATCH 24/31] clk: mediatek: add infrasys clock mux support Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-13  4:21   ` Sean Anderson
2022-08-17  8:00     ` Weijie Gao
2022-08-04  3:36 ` [PATCH 25/31] clk: mediatek: add CLK_XTAL support for clock driver Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-08  3:10     ` Weijie Gao
2022-08-13  4:25   ` Sean Anderson
2022-08-17  8:08     ` Weijie Gao
2022-08-04  3:36 ` [PATCH 26/31] clk: mediatek: add clock driver support for MediaTek MT7986 SoC Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-08  3:13     ` Weijie Gao
2022-08-04  3:36 ` [PATCH 27/31] clk: mediatek: add clock driver support for MediaTek MT7981 SoC Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-08  3:18     ` Weijie Gao
2022-08-13  4:31   ` Sean Anderson
2022-08-17  8:16     ` Weijie Gao
2022-08-04  3:36 ` [PATCH 28/31] tools: mtk_image: split gfh header verification into a new function Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-04  3:36 ` [PATCH 29/31] tools: mtk_image: split the code of generating NAND header into a new file Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-08  3:23     ` Weijie Gao
2022-08-05 18:26   ` Daniel Golle
2022-08-08  3:26     ` Weijie Gao
2022-08-04  3:36 ` [PATCH 30/31] tools: mtk_image: add support for nand headers used by newer chips Weijie Gao
2022-08-04 13:57   ` Simon Glass
2022-08-08  3:31     ` Weijie Gao
2022-08-04  3:36 ` [PATCH 31/31] MAINTAINERS: update maintainer for MediaTek ARM platform Weijie Gao
2022-08-04 13:57   ` Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAGi-RU+B8hNiq9BEKEt7-PKexoSYB2h6t3o1OT3ZP70jWkt98g@mail.gmail.com \
    --to=rfried.dev@gmail.com \
    --cc=GSS_MTK_Uboot_upstream@mediatek.com \
    --cc=joe.hershberger@ni.com \
    --cc=u-boot@lists.denx.de \
    --cc=weijie.gao@mediatek.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.