From: Russell King <rmk+kernel@arm.linux.org.uk> To: alsa-devel@alsa-project.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org Cc: Fabio Estevam <fabio.estevam@freescale.com>, David Airlie <airlied@linux.ie>, Takashi Iwai <tiwai@suse.de>, Mark Brown <broonie@kernel.org>, Philipp Zabel <p.zabel@pengutronix.de>, Yakir Yang <ykk@rock-chips.com> Subject: [PATCH 02/13] drm: bridge/dw_hdmi: clean up phy configuration Date: Sat, 09 May 2015 11:26:01 +0100 [thread overview] Message-ID: <E1Yr1xJ-0006kc-GE@rmk-PC.arm.linux.org.uk> (raw) In-Reply-To: <20150509102501.GO2067@n2100.arm.linux.org.uk> The phy configuration is dependent on the SoC, and we look up values for some of the registers in SoC specific data. However, we had partially programmed the phy before we had successfully looked up the clock rate. Also, we were only checking that we had a valid configuration for the currctrl register. Move all these lookups to the start of this function instead, so we can check that all lookups were successful before beginning to program the phy. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> --- drivers/gpu/drm/bridge/dw_hdmi.c | 68 +++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/drivers/gpu/drm/bridge/dw_hdmi.c b/drivers/gpu/drm/bridge/dw_hdmi.c index 3494391e4199..23ea8c5c85b6 100644 --- a/drivers/gpu/drm/bridge/dw_hdmi.c +++ b/drivers/gpu/drm/bridge/dw_hdmi.c @@ -753,12 +753,12 @@ static void dw_hdmi_phy_sel_interface_control(struct dw_hdmi *hdmi, u8 enable) static int hdmi_phy_configure(struct dw_hdmi *hdmi, unsigned char prep, unsigned char res, int cscon) { - unsigned res_idx, i; + unsigned res_idx; u8 val, msec; - const struct dw_hdmi_plat_data *plat_data = hdmi->plat_data; - const struct dw_hdmi_mpll_config *mpll_config = plat_data->mpll_cfg; - const struct dw_hdmi_curr_ctrl *curr_ctrl = plat_data->cur_ctr; - const struct dw_hdmi_phy_config *phy_config = plat_data->phy_config; + const struct dw_hdmi_plat_data *pdata = hdmi->plat_data; + const struct dw_hdmi_mpll_config *mpll_config = pdata->mpll_cfg; + const struct dw_hdmi_curr_ctrl *curr_ctrl = pdata->cur_ctr; + const struct dw_hdmi_phy_config *phy_config = pdata->phy_config; if (prep) return -EINVAL; @@ -778,6 +778,30 @@ static int hdmi_phy_configure(struct dw_hdmi *hdmi, unsigned char prep, return -EINVAL; } + /* PLL/MPLL Cfg - always match on final entry */ + for (; mpll_config->mpixelclock != ~0UL; mpll_config++) + if (hdmi->hdmi_data.video_mode.mpixelclock <= + mpll_config->mpixelclock) + break; + + for (; curr_ctrl->mpixelclock != ~0UL; curr_ctrl++) + if (hdmi->hdmi_data.video_mode.mpixelclock <= + curr_ctrl->mpixelclock) + break; + + for (; phy_config->mpixelclock != ~0UL; phy_config++) + if (hdmi->hdmi_data.video_mode.mpixelclock <= + phy_config->mpixelclock) + break; + + if (mpll_config->mpixelclock == ~0UL || + curr_ctrl->mpixelclock == ~0UL || + phy_config->mpixelclock == ~0UL) { + dev_err(hdmi->dev, "Pixel clock %d - unsupported by HDMI\n", + hdmi->hdmi_data.video_mode.mpixelclock); + return -EINVAL; + } + /* Enable csc path */ if (cscon) val = HDMI_MC_FLOWCTRL_FEED_THROUGH_OFF_CSC_IN_PATH; @@ -803,40 +827,18 @@ static int hdmi_phy_configure(struct dw_hdmi *hdmi, unsigned char prep, HDMI_PHY_I2CM_SLAVE_ADDR); hdmi_phy_test_clear(hdmi, 0); - /* PLL/MPLL Cfg - always match on final entry */ - for (i = 0; mpll_config[i].mpixelclock != (~0UL); i++) - if (hdmi->hdmi_data.video_mode.mpixelclock <= - mpll_config[i].mpixelclock) - break; - - hdmi_phy_i2c_write(hdmi, mpll_config[i].res[res_idx].cpce, 0x06); - hdmi_phy_i2c_write(hdmi, mpll_config[i].res[res_idx].gmp, 0x15); - - for (i = 0; curr_ctrl[i].mpixelclock != (~0UL); i++) - if (hdmi->hdmi_data.video_mode.mpixelclock <= - curr_ctrl[i].mpixelclock) - break; - - if (curr_ctrl[i].mpixelclock == (~0UL)) { - dev_err(hdmi->dev, "Pixel clock %d - unsupported by HDMI\n", - hdmi->hdmi_data.video_mode.mpixelclock); - return -EINVAL; - } + hdmi_phy_i2c_write(hdmi, mpll_config->res[res_idx].cpce, 0x06); + hdmi_phy_i2c_write(hdmi, mpll_config->res[res_idx].gmp, 0x15); /* CURRCTRL */ - hdmi_phy_i2c_write(hdmi, curr_ctrl[i].curr[res_idx], 0x10); + hdmi_phy_i2c_write(hdmi, curr_ctrl->curr[res_idx], 0x10); hdmi_phy_i2c_write(hdmi, 0x0000, 0x13); /* PLLPHBYCTRL */ hdmi_phy_i2c_write(hdmi, 0x0006, 0x17); - for (i = 0; phy_config[i].mpixelclock != (~0UL); i++) - if (hdmi->hdmi_data.video_mode.mpixelclock <= - phy_config[i].mpixelclock) - break; - - hdmi_phy_i2c_write(hdmi, phy_config[i].term, 0x19); /* TXTERM */ - hdmi_phy_i2c_write(hdmi, phy_config[i].sym_ctr, 0x09); /* CKSYMTXCTRL */ - hdmi_phy_i2c_write(hdmi, phy_config[i].vlev_ctr, 0x0E); /* VLEVCTRL */ + hdmi_phy_i2c_write(hdmi, phy_config->term, 0x19); /* TXTERM */ + hdmi_phy_i2c_write(hdmi, phy_config->sym_ctr, 0x09); /* CKSYMTXCTRL */ + hdmi_phy_i2c_write(hdmi, phy_config->vlev_ctr, 0x0E); /* VLEVCTRL */ /* REMOVE CLK TERM */ hdmi_phy_i2c_write(hdmi, 0x8000, 0x05); /* CKCALCTRL */ -- 1.8.3.1
WARNING: multiple messages have this Message-ID (diff)
From: rmk+kernel@arm.linux.org.uk (Russell King) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 02/13] drm: bridge/dw_hdmi: clean up phy configuration Date: Sat, 09 May 2015 11:26:01 +0100 [thread overview] Message-ID: <E1Yr1xJ-0006kc-GE@rmk-PC.arm.linux.org.uk> (raw) In-Reply-To: <20150509102501.GO2067@n2100.arm.linux.org.uk> The phy configuration is dependent on the SoC, and we look up values for some of the registers in SoC specific data. However, we had partially programmed the phy before we had successfully looked up the clock rate. Also, we were only checking that we had a valid configuration for the currctrl register. Move all these lookups to the start of this function instead, so we can check that all lookups were successful before beginning to program the phy. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> --- drivers/gpu/drm/bridge/dw_hdmi.c | 68 +++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/drivers/gpu/drm/bridge/dw_hdmi.c b/drivers/gpu/drm/bridge/dw_hdmi.c index 3494391e4199..23ea8c5c85b6 100644 --- a/drivers/gpu/drm/bridge/dw_hdmi.c +++ b/drivers/gpu/drm/bridge/dw_hdmi.c @@ -753,12 +753,12 @@ static void dw_hdmi_phy_sel_interface_control(struct dw_hdmi *hdmi, u8 enable) static int hdmi_phy_configure(struct dw_hdmi *hdmi, unsigned char prep, unsigned char res, int cscon) { - unsigned res_idx, i; + unsigned res_idx; u8 val, msec; - const struct dw_hdmi_plat_data *plat_data = hdmi->plat_data; - const struct dw_hdmi_mpll_config *mpll_config = plat_data->mpll_cfg; - const struct dw_hdmi_curr_ctrl *curr_ctrl = plat_data->cur_ctr; - const struct dw_hdmi_phy_config *phy_config = plat_data->phy_config; + const struct dw_hdmi_plat_data *pdata = hdmi->plat_data; + const struct dw_hdmi_mpll_config *mpll_config = pdata->mpll_cfg; + const struct dw_hdmi_curr_ctrl *curr_ctrl = pdata->cur_ctr; + const struct dw_hdmi_phy_config *phy_config = pdata->phy_config; if (prep) return -EINVAL; @@ -778,6 +778,30 @@ static int hdmi_phy_configure(struct dw_hdmi *hdmi, unsigned char prep, return -EINVAL; } + /* PLL/MPLL Cfg - always match on final entry */ + for (; mpll_config->mpixelclock != ~0UL; mpll_config++) + if (hdmi->hdmi_data.video_mode.mpixelclock <= + mpll_config->mpixelclock) + break; + + for (; curr_ctrl->mpixelclock != ~0UL; curr_ctrl++) + if (hdmi->hdmi_data.video_mode.mpixelclock <= + curr_ctrl->mpixelclock) + break; + + for (; phy_config->mpixelclock != ~0UL; phy_config++) + if (hdmi->hdmi_data.video_mode.mpixelclock <= + phy_config->mpixelclock) + break; + + if (mpll_config->mpixelclock == ~0UL || + curr_ctrl->mpixelclock == ~0UL || + phy_config->mpixelclock == ~0UL) { + dev_err(hdmi->dev, "Pixel clock %d - unsupported by HDMI\n", + hdmi->hdmi_data.video_mode.mpixelclock); + return -EINVAL; + } + /* Enable csc path */ if (cscon) val = HDMI_MC_FLOWCTRL_FEED_THROUGH_OFF_CSC_IN_PATH; @@ -803,40 +827,18 @@ static int hdmi_phy_configure(struct dw_hdmi *hdmi, unsigned char prep, HDMI_PHY_I2CM_SLAVE_ADDR); hdmi_phy_test_clear(hdmi, 0); - /* PLL/MPLL Cfg - always match on final entry */ - for (i = 0; mpll_config[i].mpixelclock != (~0UL); i++) - if (hdmi->hdmi_data.video_mode.mpixelclock <= - mpll_config[i].mpixelclock) - break; - - hdmi_phy_i2c_write(hdmi, mpll_config[i].res[res_idx].cpce, 0x06); - hdmi_phy_i2c_write(hdmi, mpll_config[i].res[res_idx].gmp, 0x15); - - for (i = 0; curr_ctrl[i].mpixelclock != (~0UL); i++) - if (hdmi->hdmi_data.video_mode.mpixelclock <= - curr_ctrl[i].mpixelclock) - break; - - if (curr_ctrl[i].mpixelclock == (~0UL)) { - dev_err(hdmi->dev, "Pixel clock %d - unsupported by HDMI\n", - hdmi->hdmi_data.video_mode.mpixelclock); - return -EINVAL; - } + hdmi_phy_i2c_write(hdmi, mpll_config->res[res_idx].cpce, 0x06); + hdmi_phy_i2c_write(hdmi, mpll_config->res[res_idx].gmp, 0x15); /* CURRCTRL */ - hdmi_phy_i2c_write(hdmi, curr_ctrl[i].curr[res_idx], 0x10); + hdmi_phy_i2c_write(hdmi, curr_ctrl->curr[res_idx], 0x10); hdmi_phy_i2c_write(hdmi, 0x0000, 0x13); /* PLLPHBYCTRL */ hdmi_phy_i2c_write(hdmi, 0x0006, 0x17); - for (i = 0; phy_config[i].mpixelclock != (~0UL); i++) - if (hdmi->hdmi_data.video_mode.mpixelclock <= - phy_config[i].mpixelclock) - break; - - hdmi_phy_i2c_write(hdmi, phy_config[i].term, 0x19); /* TXTERM */ - hdmi_phy_i2c_write(hdmi, phy_config[i].sym_ctr, 0x09); /* CKSYMTXCTRL */ - hdmi_phy_i2c_write(hdmi, phy_config[i].vlev_ctr, 0x0E); /* VLEVCTRL */ + hdmi_phy_i2c_write(hdmi, phy_config->term, 0x19); /* TXTERM */ + hdmi_phy_i2c_write(hdmi, phy_config->sym_ctr, 0x09); /* CKSYMTXCTRL */ + hdmi_phy_i2c_write(hdmi, phy_config->vlev_ctr, 0x0E); /* VLEVCTRL */ /* REMOVE CLK TERM */ hdmi_phy_i2c_write(hdmi, 0x8000, 0x05); /* CKCALCTRL */ -- 1.8.3.1
next prev parent reply other threads:[~2015-05-09 10:26 UTC|newest] Thread overview: 148+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-04-02 9:20 [RFC v2 0/13] dw_hdmi cleanups, audio preparation, helpers and ahb audio support Russell King - ARM Linux 2015-04-02 9:20 ` Russell King - ARM Linux 2015-04-02 9:21 ` [PATCH RFC v2 01/13] drm: imx/dw_hdmi: move phy comments Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:21 ` [PATCH RFC v2 02/13] drm: bridge/dw_hdmi: clean up phy configuration Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:21 ` [PATCH RFC v2 03/13] drm: bridge/dw_hdmi: clean up hdmi_set_clk_regenerator() Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:21 ` [PATCH RFC v2 04/13] drm: bridge/dw_hdmi: use drm_hdmi_avi_infoframe_from_display_mode() Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:21 ` [PATCH RFC v2 05/13] drm: bridge/dw_hdmi: simplify hdmi_config_AVI() a little Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:21 ` [PATCH RFC v2 06/13] drm: bridge/dw_hdmi: remove mhsyncpolarity/mvsyncpolarity/minterlaced Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:21 ` [PATCH RFC v2 07/13] drm: bridge/dw_hdmi: introduce interface to setting sample rate Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:21 ` [PATCH RFC v2 08/13] drm: bridge/dw_hdmi: introduce interfaces to enable and disable audio Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:22 ` [PATCH RFC v2 09/13] drm/edid: add function to help find SADs Russell King 2015-04-02 9:22 ` Russell King 2015-04-02 9:22 ` [PATCH RFC v2 10/13] sound/core: add DRM ELD helper Russell King 2015-04-02 9:22 ` Russell King 2015-04-05 15:57 ` Takashi Iwai 2015-04-05 15:57 ` Takashi Iwai 2015-04-05 16:20 ` Russell King - ARM Linux 2015-04-05 16:20 ` Russell King - ARM Linux 2015-04-05 16:46 ` Takashi Iwai 2015-04-05 16:46 ` Takashi Iwai 2015-04-05 17:26 ` Russell King - ARM Linux 2015-04-05 17:26 ` Russell King - ARM Linux 2015-05-06 17:02 ` Anssi Hannula 2015-05-06 17:02 ` Anssi Hannula 2015-05-07 10:41 ` Russell King - ARM Linux 2015-05-07 10:41 ` Russell King - ARM Linux 2015-05-07 11:11 ` Lars-Peter Clausen 2015-05-07 11:11 ` [alsa-devel] " Lars-Peter Clausen 2015-05-08 10:56 ` Jyri Sarha 2015-05-08 10:56 ` Jyri Sarha 2015-05-08 11:42 ` Russell King - ARM Linux 2015-05-08 11:42 ` Russell King - ARM Linux 2015-05-05 22:35 ` Mark Brown 2015-05-05 22:35 ` Mark Brown 2015-05-06 8:58 ` Liam Girdwood 2015-05-06 8:58 ` [alsa-devel] " Liam Girdwood 2015-05-08 13:16 ` Jyri Sarha 2015-05-08 13:16 ` Jyri Sarha 2015-05-08 13:27 ` Russell King - ARM Linux 2015-05-08 13:27 ` Russell King - ARM Linux 2015-05-08 13:37 ` Jyri Sarha 2015-05-08 13:37 ` [alsa-devel] " Jyri Sarha 2015-04-02 9:22 ` [PATCH RFC v2 11/13] sound/core: add IEC958 channel status helper Russell King 2015-04-02 9:22 ` Russell King 2015-04-02 9:22 ` [PATCH RFC v2 12/13] drm: bridge/dw_hdmi-ahb-audio: add audio driver Russell King 2015-04-02 9:22 ` Russell King 2015-04-02 9:22 ` [PATCH RFC v2 13/13] drm: bridge/dw_hdmi-ahb-audio: parse ELD from HDMI driver Russell King 2015-04-02 9:22 ` Russell King 2015-05-09 10:25 ` [PATCH v3 0/13] dw_hdmi cleanups, audio preparation, helpers and ahb audio support Russell King - ARM Linux 2015-05-09 10:25 ` Russell King - ARM Linux 2015-05-09 10:25 ` [PATCH 01/13] drm: imx/dw_hdmi: move phy comments Russell King 2015-05-09 10:25 ` Russell King 2015-05-09 10:26 ` Russell King [this message] 2015-05-09 10:26 ` [PATCH 02/13] drm: bridge/dw_hdmi: clean up phy configuration Russell King 2015-05-22 15:19 ` Yakir 2015-05-22 15:19 ` Yakir 2015-05-09 10:26 ` [PATCH 03/13] drm: bridge/dw_hdmi: clean up hdmi_set_clk_regenerator() Russell King 2015-05-09 10:26 ` Russell King 2015-05-22 15:22 ` Yakir 2015-05-22 15:22 ` Yakir 2015-05-09 10:26 ` [PATCH 04/13] drm: bridge/dw_hdmi: use drm_hdmi_avi_infoframe_from_display_mode() Russell King 2015-05-09 10:26 ` Russell King 2015-05-09 10:26 ` [PATCH 05/13] drm: bridge/dw_hdmi: simplify hdmi_config_AVI() a little Russell King 2015-05-09 10:26 ` Russell King 2015-05-09 10:26 ` [PATCH 06/13] drm: bridge/dw_hdmi: remove mhsyncpolarity/mvsyncpolarity/minterlaced Russell King 2015-05-09 10:26 ` Russell King 2015-05-09 10:26 ` [PATCH 07/13] drm: bridge/dw_hdmi: introduce interface to setting sample rate Russell King 2015-05-09 10:26 ` Russell King 2015-05-22 15:26 ` Yakir 2015-05-22 15:26 ` Yakir 2015-05-09 10:26 ` [PATCH 08/13] drm: bridge/dw_hdmi: introduce interfaces to enable and disable audio Russell King 2015-05-09 10:26 ` Russell King 2015-05-22 15:28 ` Yakir 2015-05-22 15:28 ` Yakir 2015-05-09 10:26 ` [PATCH 09/13] drm/edid: add function to help find SADs Russell King 2015-05-09 10:26 ` Russell King 2015-05-09 10:26 ` [PATCH 10/13] sound/core: add DRM ELD helper Russell King 2015-05-09 10:26 ` Russell King 2015-05-22 12:20 ` [alsa-devel] " Mark Brown 2015-05-22 12:20 ` Mark Brown 2015-05-22 13:15 ` Russell King - ARM Linux 2015-05-22 13:15 ` Russell King - ARM Linux 2015-05-22 13:30 ` Takashi Iwai 2015-05-22 13:30 ` Takashi Iwai 2015-05-22 13:53 ` Russell King - ARM Linux 2015-05-22 13:53 ` Russell King - ARM Linux 2015-05-22 13:54 ` Takashi Iwai 2015-05-22 13:54 ` Takashi Iwai 2015-05-22 14:00 ` Russell King - ARM Linux 2015-05-22 14:00 ` Russell King - ARM Linux 2015-05-22 14:02 ` Takashi Iwai 2015-05-22 14:02 ` Takashi Iwai 2015-05-22 14:05 ` Takashi Iwai 2015-05-22 14:05 ` Takashi Iwai 2015-05-22 16:12 ` Russell King - ARM Linux 2015-05-22 16:12 ` Russell King - ARM Linux 2015-05-09 10:26 ` [PATCH 11/13] sound/core: add IEC958 channel status helper Russell King 2015-05-09 10:26 ` Russell King 2015-05-22 12:40 ` Mark Brown 2015-05-22 12:40 ` Mark Brown 2015-05-09 10:26 ` [PATCH 12/13] drm: bridge/dw_hdmi-ahb-audio: add audio driver Russell King 2015-05-09 10:26 ` Russell King 2015-05-09 16:49 ` [alsa-devel] " Anssi Hannula 2015-05-09 16:49 ` Anssi Hannula 2015-05-09 16:55 ` Russell King - ARM Linux 2015-05-09 16:55 ` Russell King - ARM Linux 2015-05-09 17:07 ` Anssi Hannula 2015-05-09 17:07 ` Anssi Hannula 2015-05-09 17:40 ` Russell King - ARM Linux 2015-05-09 17:40 ` Russell King - ARM Linux 2015-05-09 17:53 ` Russell King - ARM Linux 2015-05-09 17:53 ` Russell King - ARM Linux 2015-05-09 17:55 ` Anssi Hannula 2015-05-09 17:55 ` Anssi Hannula 2015-05-09 18:11 ` Russell King - ARM Linux 2015-05-09 18:11 ` Russell King - ARM Linux 2015-05-10 18:59 ` Anssi Hannula 2015-05-10 18:59 ` Anssi Hannula 2015-05-10 19:33 ` Russell King - ARM Linux 2015-05-10 19:33 ` Russell King - ARM Linux 2015-05-10 20:47 ` Anssi Hannula 2015-05-10 20:47 ` Anssi Hannula 2015-05-11 15:58 ` Mark Brown 2015-05-11 15:58 ` [alsa-devel] " Mark Brown 2015-05-09 10:26 ` [PATCH 13/13] drm: bridge/dw_hdmi-ahb-audio: parse ELD from HDMI driver Russell King 2015-05-09 10:26 ` Russell King 2015-05-27 10:43 ` Daniel Vetter 2015-05-27 10:43 ` Daniel Vetter 2015-05-27 11:43 ` Mark Brown 2015-05-27 11:43 ` Mark Brown 2015-05-27 17:31 ` Russell King - ARM Linux 2015-05-27 17:31 ` Russell King - ARM Linux 2015-05-27 21:29 ` Daniel Vetter 2015-05-27 21:29 ` Daniel Vetter 2015-05-27 21:44 ` Russell King - ARM Linux 2015-05-27 21:44 ` Russell King - ARM Linux 2015-05-28 6:43 ` Daniel Vetter 2015-05-28 6:43 ` Daniel Vetter 2015-05-28 4:56 ` [alsa-devel] " Takashi Iwai 2015-05-28 4:56 ` Takashi Iwai
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=E1Yr1xJ-0006kc-GE@rmk-PC.arm.linux.org.uk \ --to=rmk+kernel@arm.linux.org.uk \ --cc=airlied@linux.ie \ --cc=alsa-devel@alsa-project.org \ --cc=broonie@kernel.org \ --cc=dri-devel@lists.freedesktop.org \ --cc=fabio.estevam@freescale.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=p.zabel@pengutronix.de \ --cc=tiwai@suse.de \ --cc=ykk@rock-chips.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: linkBe 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.