From: Rahul Pathak <rahul.pathak@oss.qualcomm.com>
To: opensbi@lists.infradead.org
Cc: rahul.pathak@oss.qualcomm.com, rahul@summations.net,
Anup Patel <anup@brainfault.org>,
Pawandeep Oza <pawandeep.oza@oss.qualcomm.com>
Subject: [PATCH 1/2] lib: sbi: Rename map_range/unmap_range functions
Date: Thu, 20 Aug 2026 17:43:08 +0530 [thread overview]
Message-ID: <20260820121309.2551296-2-rahul.pathak@oss.qualcomm.com> (raw)
In-Reply-To: <20260820121309.2551296-1-rahul.pathak@oss.qualcomm.com>
*_map_range and *_unmap_range functions are required
in M-Mode to get the temporary access to S-Mode and U-Mode
regions. Thse functions only operate using the TYPE_MEMORY
memory protection mechanisms. Rename them to reflect the
actual usage of these functions and let generic map/unmap_range
names to implement generic functions
Signed-off-by: Rahul Pathak <rahul.pathak@oss.qualcomm.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
Reviewed-by: Pawandeep Oza <pawandeep.oza@oss.qualcomm.com>
---
include/sbi/sbi_hart_protection.h | 27 ++++++++++++++++-----------
lib/sbi/sbi_dbtr.c | 26 +++++++++++++-------------
lib/sbi/sbi_ecall_dbcn.c | 4 ++--
lib/sbi/sbi_hart_pmp.c | 10 +++++-----
lib/sbi/sbi_hart_protection.c | 12 ++++++------
lib/sbi/sbi_mpxy.c | 24 ++++++++++++------------
lib/sbi/sbi_pmu.c | 4 ++--
lib/sbi/sbi_sse.c | 8 ++++----
8 files changed, 60 insertions(+), 55 deletions(-)
diff --git a/include/sbi/sbi_hart_protection.h b/include/sbi/sbi_hart_protection.h
index cafe6ee7..bdcad008 100644
--- a/include/sbi/sbi_hart_protection.h
+++ b/include/sbi/sbi_hart_protection.h
@@ -40,13 +40,17 @@ struct sbi_hart_protection {
/** Unconfigure protection for current HART (Optional) */
void (*unconfigure)(struct sbi_scratch *scratch, struct sbi_domain *dom);
- /** Create temporary mapping to access address range on current HART (Optional) */
- int (*map_range)(struct sbi_scratch *scratch,
- unsigned long base, unsigned long size);
-
- /** Destroy temporary mapping on current HART (Optional) */
- int (*unmap_range)(struct sbi_scratch *scratch,
- unsigned long base, unsigned long size);
+ /**
+ * Give temporary M-mode access to an S/U-mode address range on current
+ * HART (Optional). Only applicable for the TYPE_MEMORY and the TYPE_ID
+ * mechanisms are not invoked.
+ */
+ int (*temp_map_range)(struct sbi_scratch *scratch,
+ unsigned long base, unsigned long size);
+
+ /** Remove the temporary M-mode access on the current HART (Optional) */
+ int (*temp_unmap_range)(struct sbi_scratch *scratch,
+ unsigned long base, unsigned long size);
};
/**
@@ -111,23 +115,24 @@ int sbi_hart_protection_reconfigure(struct sbi_scratch *scratch,
struct sbi_domain *next_dom);
/**
- * Create temporary mapping to access address range on current HART
+ * Give temporary M-mode access to an S/U-mode address range on the
+ * current HART. Only valid for TYPE_MEMORY.
*
* @param base base address of the temporary mapping
* @param size size of the temporary mapping
*
* @return 0 on success and negative error code on failure
*/
-int sbi_hart_protection_map_range(unsigned long base, unsigned long size);
+int sbi_hart_protection_temp_map_range(unsigned long base, unsigned long size);
/**
- * Destroy temporary mapping to access address range on current HART
+ * Remove the temporary M-mode access on the current HART
*
* @param base base address of the temporary mapping
* @param size size of the temporary mapping
*
* @return 0 on success and negative error code on failure
*/
-int sbi_hart_protection_unmap_range(unsigned long base, unsigned long size);
+int sbi_hart_protection_temp_unmap_range(unsigned long base, unsigned long size);
#endif /* __SBI_HART_PROTECTION_H__ */
diff --git a/lib/sbi/sbi_dbtr.c b/lib/sbi/sbi_dbtr.c
index 01047969..afa8232f 100644
--- a/lib/sbi/sbi_dbtr.c
+++ b/lib/sbi/sbi_dbtr.c
@@ -580,7 +580,7 @@ int sbi_dbtr_read_trig(unsigned long smode,
shmem_base = hart_shmem_base(hs);
- sbi_hart_protection_map_range((unsigned long)shmem_base,
+ sbi_hart_protection_temp_map_range((unsigned long)shmem_base,
trig_count * sizeof(*entry));
for_each_trig_entry(shmem_base, trig_count, typeof(*entry), entry) {
xmit = &entry->data;
@@ -594,7 +594,7 @@ int sbi_dbtr_read_trig(unsigned long smode,
xmit->tdata2 = cpu_to_lle(trig->tdata2);
xmit->tdata3 = cpu_to_lle(trig->tdata3);
}
- sbi_hart_protection_unmap_range((unsigned long)shmem_base,
+ sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base,
trig_count * sizeof(*entry));
return SBI_SUCCESS;
@@ -620,7 +620,7 @@ int sbi_dbtr_install_trig(unsigned long smode,
return SBI_ERR_NO_SHMEM;
shmem_base = hart_shmem_base(hs);
- sbi_hart_protection_map_range((unsigned long)shmem_base,
+ sbi_hart_protection_temp_map_range((unsigned long)shmem_base,
trig_count * sizeof(*entry));
/*
@@ -639,14 +639,14 @@ int sbi_dbtr_install_trig(unsigned long smode,
if (!dbtr_trigger_supported(TDATA1_GET_TYPE(ctrl))) {
*out = _idx;
- sbi_hart_protection_unmap_range((unsigned long)shmem_base,
+ sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base,
trig_count * sizeof(*entry));
return SBI_ERR_FAILED;
}
if (!dbtr_trigger_valid(TDATA1_GET_TYPE(ctrl), ctrl)) {
*out = _idx;
- sbi_hart_protection_unmap_range((unsigned long)shmem_base,
+ sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base,
trig_count * sizeof(*entry));
return SBI_ERR_FAILED;
}
@@ -654,7 +654,7 @@ int sbi_dbtr_install_trig(unsigned long smode,
if ((recv->tdata2 && !tdata2_impl) ||
(recv->tdata3 && !tdata3_impl)) {
*out = _idx;
- sbi_hart_protection_unmap_range((unsigned long)shmem_base,
+ sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base,
trig_count * sizeof(*entry));
return SBI_ERR_NOT_SUPPORTED;
}
@@ -662,7 +662,7 @@ int sbi_dbtr_install_trig(unsigned long smode,
if (hs->available_trigs < trig_count) {
*out = hs->available_trigs;
- sbi_hart_protection_unmap_range((unsigned long)shmem_base,
+ sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base,
trig_count * sizeof(*entry));
return SBI_ERR_FAILED;
}
@@ -684,7 +684,7 @@ int sbi_dbtr_install_trig(unsigned long smode,
}
- sbi_hart_protection_unmap_range((unsigned long)shmem_base,
+ sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base,
trig_count * sizeof(*entry));
return SBI_SUCCESS;
@@ -768,29 +768,29 @@ int sbi_dbtr_update_trig(unsigned long smode,
tdata3_impl = tdata_implemented(CSR_TDATA3);
for_each_trig_entry(shmem_base, trig_count, typeof(*entry), entry) {
- sbi_hart_protection_map_range((unsigned long)entry, sizeof(*entry));
+ sbi_hart_protection_temp_map_range((unsigned long)entry, sizeof(*entry));
trig_idx = entry->id.idx;
if (trig_idx >= hs->total_trigs) {
- sbi_hart_protection_unmap_range((unsigned long)entry, sizeof(*entry));
+ sbi_hart_protection_temp_unmap_range((unsigned long)entry, sizeof(*entry));
return SBI_ERR_INVALID_PARAM;
}
trig = INDEX_TO_TRIGGER(trig_idx);
if (!(trig->state & RV_DBTR_BIT_MASK(TS, MAPPED))) {
- sbi_hart_protection_unmap_range((unsigned long)entry, sizeof(*entry));
+ sbi_hart_protection_temp_unmap_range((unsigned long)entry, sizeof(*entry));
return SBI_ERR_FAILED;
}
if ((entry->data.tdata2 && !tdata2_impl) ||
(entry->data.tdata3 && !tdata3_impl)) {
- sbi_hart_protection_unmap_range((unsigned long)entry, sizeof(*entry));
+ sbi_hart_protection_temp_unmap_range((unsigned long)entry, sizeof(*entry));
return SBI_ERR_NOT_SUPPORTED;
}
dbtr_trigger_setup(trig, &entry->data);
- sbi_hart_protection_unmap_range((unsigned long)entry, sizeof(*entry));
+ sbi_hart_protection_temp_unmap_range((unsigned long)entry, sizeof(*entry));
dbtr_trigger_enable(trig);
}
diff --git a/lib/sbi/sbi_ecall_dbcn.c b/lib/sbi/sbi_ecall_dbcn.c
index 75c8455d..76837737 100644
--- a/lib/sbi/sbi_ecall_dbcn.c
+++ b/lib/sbi/sbi_ecall_dbcn.c
@@ -46,12 +46,12 @@ static int sbi_ecall_dbcn_handler(unsigned long extid, unsigned long funcid,
regs->a1, regs->a0, smode,
SBI_DOMAIN_READ|SBI_DOMAIN_WRITE))
return SBI_ERR_INVALID_PARAM;
- sbi_hart_protection_map_range(regs->a1, regs->a0);
+ sbi_hart_protection_temp_map_range(regs->a1, regs->a0);
if (funcid == SBI_EXT_DBCN_CONSOLE_WRITE)
out->value = sbi_nputs((const char *)regs->a1, regs->a0);
else
out->value = sbi_ngets((char *)regs->a1, regs->a0);
- sbi_hart_protection_unmap_range(regs->a1, regs->a0);
+ sbi_hart_protection_temp_unmap_range(regs->a1, regs->a0);
return 0;
case SBI_EXT_DBCN_CONSOLE_WRITE_BYTE:
sbi_putc(regs->a0);
diff --git a/lib/sbi/sbi_hart_pmp.c b/lib/sbi/sbi_hart_pmp.c
index c0a4ce1b..c530739f 100644
--- a/lib/sbi/sbi_hart_pmp.c
+++ b/lib/sbi/sbi_hart_pmp.c
@@ -135,7 +135,7 @@ int sbi_hart_pmp_get(unsigned int n, unsigned long *prot_out, unsigned long *add
* When shared memory access is required, the physical address
* should be programmed into the first PMP entry with R/W
* permissions to the M-mode. Once the work is done, it should be
- * unmapped. sbi_hart_protection_map_range/sbi_hart_protection_unmap_range
+ * unmapped. sbi_hart_protection_temp_map_range/sbi_hart_protection_temp_unmap_range
* function pair should be used to map/unmap the shared memory.
*/
#define SBI_SMEPMP_RESV_ENTRY 0
@@ -327,7 +327,7 @@ static int sbi_hart_smepmp_configure(struct sbi_scratch *scratch,
return 0;
}
-static int sbi_hart_smepmp_map_range(struct sbi_scratch *scratch,
+static int sbi_hart_smepmp_temp_map_range(struct sbi_scratch *scratch,
unsigned long addr, unsigned long size)
{
/* shared R/W access for M and S/U mode */
@@ -359,7 +359,7 @@ static int sbi_hart_smepmp_map_range(struct sbi_scratch *scratch,
return SBI_OK;
}
-static int sbi_hart_smepmp_unmap_range(struct sbi_scratch *scratch,
+static int sbi_hart_smepmp_temp_unmap_range(struct sbi_scratch *scratch,
unsigned long addr, unsigned long size)
{
sbi_platform_pmp_disable(sbi_platform_ptr(scratch), SBI_SMEPMP_RESV_ENTRY);
@@ -436,8 +436,8 @@ static struct sbi_hart_protection epmp_protection = {
.type = SBI_HART_PROTECTION_TYPE_MEMORY,
.configure = sbi_hart_smepmp_configure,
.unconfigure = sbi_hart_pmp_unconfigure,
- .map_range = sbi_hart_smepmp_map_range,
- .unmap_range = sbi_hart_smepmp_unmap_range,
+ .temp_map_range = sbi_hart_smepmp_temp_map_range,
+ .temp_unmap_range = sbi_hart_smepmp_temp_unmap_range,
};
int sbi_hart_pmp_init(struct sbi_scratch *scratch)
diff --git a/lib/sbi/sbi_hart_protection.c b/lib/sbi/sbi_hart_protection.c
index c4c149c8..ee4d4beb 100644
--- a/lib/sbi/sbi_hart_protection.c
+++ b/lib/sbi/sbi_hart_protection.c
@@ -196,22 +196,22 @@ int sbi_hart_protection_reconfigure(struct sbi_scratch *scratch,
return 0;
}
-int sbi_hart_protection_map_range(unsigned long base, unsigned long size)
+int sbi_hart_protection_temp_map_range(unsigned long base, unsigned long size)
{
struct sbi_hart_protection *hprot = __hart_memory_protection_best();
- if (!hprot || !hprot->map_range)
+ if (!hprot || !hprot->temp_map_range)
return 0;
- return hprot->map_range(sbi_scratch_thishart_ptr(), base, size);
+ return hprot->temp_map_range(sbi_scratch_thishart_ptr(), base, size);
}
-int sbi_hart_protection_unmap_range(unsigned long base, unsigned long size)
+int sbi_hart_protection_temp_unmap_range(unsigned long base, unsigned long size)
{
struct sbi_hart_protection *hprot = __hart_memory_protection_best();
- if (!hprot || !hprot->unmap_range)
+ if (!hprot || !hprot->temp_unmap_range)
return 0;
- return hprot->unmap_range(sbi_scratch_thishart_ptr(), base, size);
+ return hprot->temp_unmap_range(sbi_scratch_thishart_ptr(), base, size);
}
diff --git a/lib/sbi/sbi_mpxy.c b/lib/sbi/sbi_mpxy.c
index 19f59f3a..41fea0ae 100644
--- a/lib/sbi/sbi_mpxy.c
+++ b/lib/sbi/sbi_mpxy.c
@@ -401,10 +401,10 @@ int sbi_mpxy_set_shmem(unsigned long shmem_phys_lo,
if (flags == SBI_EXT_MPXY_SHMEM_FLAG_OVERWRITE_RETURN) {
ret_buf = (unsigned long *)(ulong)SHMEM_PHYS_ADDR(shmem_phys_hi,
shmem_phys_lo);
- sbi_hart_protection_map_range((unsigned long)ret_buf, mpxy_shmem_size);
+ sbi_hart_protection_temp_map_range((unsigned long)ret_buf, mpxy_shmem_size);
ret_buf[0] = cpu_to_lle(ms->shmem.shmem_addr_lo);
ret_buf[1] = cpu_to_lle(ms->shmem.shmem_addr_hi);
- sbi_hart_protection_unmap_range((unsigned long)ret_buf, mpxy_shmem_size);
+ sbi_hart_protection_temp_unmap_range((unsigned long)ret_buf, mpxy_shmem_size);
}
/** Setup the new shared memory */
@@ -436,7 +436,7 @@ int sbi_mpxy_get_channel_ids(u32 start_index)
return SBI_ERR_INVALID_PARAM;
shmem_base = hart_shmem_base(ms);
- sbi_hart_protection_map_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size);
+ sbi_hart_protection_temp_map_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size);
/** number of channel ids which can be stored in shmem adjusting
* for remaining and returned fields */
@@ -466,7 +466,7 @@ int sbi_mpxy_get_channel_ids(u32 start_index)
shmem_base[0] = cpu_to_le32(remaining);
shmem_base[1] = cpu_to_le32(returned);
- sbi_hart_protection_unmap_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size);
+ sbi_hart_protection_temp_unmap_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size);
return SBI_SUCCESS;
}
@@ -498,7 +498,7 @@ int sbi_mpxy_read_attrs(u32 channel_id, u32 base_attr_id, u32 attr_count)
shmem_base = hart_shmem_base(ms);
end_id = base_attr_id + attr_count - 1;
- sbi_hart_protection_map_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size);
+ sbi_hart_protection_temp_map_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size);
/* Standard attributes range check */
if (mpxy_is_std_attr(base_attr_id)) {
@@ -537,7 +537,7 @@ int sbi_mpxy_read_attrs(u32 channel_id, u32 base_attr_id, u32 attr_count)
base_attr_id, attr_count);
}
out:
- sbi_hart_protection_unmap_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size);
+ sbi_hart_protection_temp_unmap_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size);
return ret;
}
@@ -650,7 +650,7 @@ int sbi_mpxy_write_attrs(u32 channel_id, u32 base_attr_id, u32 attr_count)
shmem_base = hart_shmem_base(ms);
end_id = base_attr_id + attr_count - 1;
- sbi_hart_protection_map_range((unsigned long)shmem_base, mpxy_shmem_size);
+ sbi_hart_protection_temp_map_range((unsigned long)shmem_base, mpxy_shmem_size);
mem_ptr = (u32 *)shmem_base;
@@ -707,7 +707,7 @@ int sbi_mpxy_write_attrs(u32 channel_id, u32 base_attr_id, u32 attr_count)
base_attr_id, attr_count);
}
out:
- sbi_hart_protection_unmap_range((unsigned long)shmem_base, mpxy_shmem_size);
+ sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base, mpxy_shmem_size);
return ret;
}
@@ -740,7 +740,7 @@ int sbi_mpxy_send_message(u32 channel_id, u8 msg_id,
return SBI_ERR_INVALID_PARAM;
shmem_base = hart_shmem_base(ms);
- sbi_hart_protection_map_range((unsigned long)shmem_base, mpxy_shmem_size);
+ sbi_hart_protection_temp_map_range((unsigned long)shmem_base, mpxy_shmem_size);
if (resp_data_len) {
resp_buf = shmem_base;
@@ -757,7 +757,7 @@ int sbi_mpxy_send_message(u32 channel_id, u8 msg_id,
msg_data_len);
}
- sbi_hart_protection_unmap_range((unsigned long)shmem_base, mpxy_shmem_size);
+ sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base, mpxy_shmem_size);
if (ret == SBI_ERR_TIMEOUT || ret == SBI_ERR_IO)
return ret;
@@ -788,12 +788,12 @@ int sbi_mpxy_get_notification_events(u32 channel_id, unsigned long *events_len)
return SBI_ERR_NOT_SUPPORTED;
shmem_base = hart_shmem_base(ms);
- sbi_hart_protection_map_range((unsigned long)shmem_base, mpxy_shmem_size);
+ sbi_hart_protection_temp_map_range((unsigned long)shmem_base, mpxy_shmem_size);
eventsbuf = shmem_base;
ret = channel->get_notification_events(channel, eventsbuf,
mpxy_shmem_size,
events_len);
- sbi_hart_protection_unmap_range((unsigned long)shmem_base, mpxy_shmem_size);
+ sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base, mpxy_shmem_size);
if (ret)
return ret;
diff --git a/lib/sbi/sbi_pmu.c b/lib/sbi/sbi_pmu.c
index a0f6d2fa..aac6adb6 100644
--- a/lib/sbi/sbi_pmu.c
+++ b/lib/sbi/sbi_pmu.c
@@ -1093,7 +1093,7 @@ int sbi_pmu_event_get_info(unsigned long shmem_phys_lo, unsigned long shmem_phys
SBI_DOMAIN_READ | SBI_DOMAIN_WRITE))
return SBI_ERR_INVALID_ADDRESS;
- sbi_hart_protection_map_range(shmem_phys_lo, shmem_size);
+ sbi_hart_protection_temp_map_range(shmem_phys_lo, shmem_size);
einfo = (struct sbi_pmu_event_info *)(shmem_phys_lo);
for (i = 0; i < num_events; i++) {
@@ -1127,7 +1127,7 @@ int sbi_pmu_event_get_info(unsigned long shmem_phys_lo, unsigned long shmem_phys
}
}
- sbi_hart_protection_unmap_range(shmem_phys_lo, shmem_size);
+ sbi_hart_protection_temp_unmap_range(shmem_phys_lo, shmem_size);
return 0;
}
diff --git a/lib/sbi/sbi_sse.c b/lib/sbi/sbi_sse.c
index 818afb87..ad9e6a06 100644
--- a/lib/sbi/sbi_sse.c
+++ b/lib/sbi/sbi_sse.c
@@ -1037,7 +1037,7 @@ int sbi_sse_read_attrs(uint32_t event_id, uint32_t base_attr_id,
if (ret)
return ret;
- sbi_hart_protection_map_range(output_phys_lo, sizeof(unsigned long) * attr_count);
+ sbi_hart_protection_temp_map_range(output_phys_lo, sizeof(unsigned long) * attr_count);
/*
* Copy all attributes at once since struct sse_event_attrs is matching
@@ -1050,7 +1050,7 @@ int sbi_sse_read_attrs(uint32_t event_id, uint32_t base_attr_id,
attrs = (unsigned long *)output_phys_lo;
copy_attrs(attrs, &e_attrs[base_attr_id], attr_count);
- sbi_hart_protection_unmap_range(output_phys_lo, sizeof(unsigned long) * attr_count);
+ sbi_hart_protection_temp_unmap_range(output_phys_lo, sizeof(unsigned long) * attr_count);
sse_event_put(e);
@@ -1065,7 +1065,7 @@ static int sse_write_attrs(struct sbi_sse_event *e, uint32_t base_attr_id,
uint32_t id, end_id = base_attr_id + attr_count;
unsigned long *attrs = (unsigned long *)input_phys;
- sbi_hart_protection_map_range(input_phys, sizeof(unsigned long) * attr_count);
+ sbi_hart_protection_temp_map_range(input_phys, sizeof(unsigned long) * attr_count);
for (id = base_attr_id; id < end_id; id++) {
val = attrs[attr++];
@@ -1081,7 +1081,7 @@ static int sse_write_attrs(struct sbi_sse_event *e, uint32_t base_attr_id,
}
out:
- sbi_hart_protection_unmap_range(input_phys, sizeof(unsigned long) * attr_count);
+ sbi_hart_protection_temp_unmap_range(input_phys, sizeof(unsigned long) * attr_count);
return ret;
}
--
2.53.0
--
opensbi mailing list
opensbi@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/opensbi
next prev parent reply other threads:[~2026-08-20 12:13 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-20 12:13 [PATCH 0/2] Rename sbi_domain functions and per-domain data Rahul Pathak
2026-08-20 12:13 ` Rahul Pathak [this message]
2026-08-25 7:56 ` [PATCH 1/2] lib: sbi: Rename map_range/unmap_range functions Ranbir Singh
2026-08-20 12:13 ` [PATCH 2/2] lib: sbi_domain: Rename per-domain data to per-domain state Rahul Pathak
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=20260820121309.2551296-2-rahul.pathak@oss.qualcomm.com \
--to=rahul.pathak@oss.qualcomm.com \
--cc=anup@brainfault.org \
--cc=opensbi@lists.infradead.org \
--cc=pawandeep.oza@oss.qualcomm.com \
--cc=rahul@summations.net \
/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.