Commit 0c02c800 authored by Grant Likely's avatar Grant Likely

of/irq: Rename of_irq_map_* functions to of_irq_parse_*

The OF irq handling code has been overloading the term 'map' to refer to
both parsing the data in the device tree and mapping it to the internal
linux irq system. This is probably because the device tree does have the
concept of an 'interrupt-map' function for translating interrupt
references from one node to another, but 'map' is still confusing when
the primary purpose of some of the functions are to parse the DT data.

This patch renames all the of_irq_map_* functions to of_irq_parse_*
which makes it clear that there is a difference between the parsing
phase and the mapping phase. Kernel code can make use of just the
parsing or just the mapping support as needed by the subsystem.

The patch was generated mechanically with a handful of sed commands.
Signed-off-by: default avatarGrant Likely <grant.likely@linaro.org>
Acked-by: default avatarMichal Simek <monstr@monstr.eu>
Acked-by: default avatarTony Lindgren <tony@atomide.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
parent 4a43d686
...@@ -840,9 +840,9 @@ static int __init pci_v3_map_irq_dt(const struct pci_dev *dev, u8 slot, u8 pin) ...@@ -840,9 +840,9 @@ static int __init pci_v3_map_irq_dt(const struct pci_dev *dev, u8 slot, u8 pin)
struct of_irq oirq; struct of_irq oirq;
int ret; int ret;
ret = of_irq_map_pci(dev, &oirq); ret = of_irq_parse_pci(dev, &oirq);
if (ret) { if (ret) {
dev_err(&dev->dev, "of_irq_map_pci() %d\n", ret); dev_err(&dev->dev, "of_irq_parse_pci() %d\n", ret);
/* Proper return code 0 == NO_IRQ */ /* Proper return code 0 == NO_IRQ */
return 0; return 0;
} }
......
...@@ -217,7 +217,7 @@ int pci_read_irq_line(struct pci_dev *pci_dev) ...@@ -217,7 +217,7 @@ int pci_read_irq_line(struct pci_dev *pci_dev)
memset(&oirq, 0xff, sizeof(oirq)); memset(&oirq, 0xff, sizeof(oirq));
#endif #endif
/* Try to get a mapping from the device-tree */ /* Try to get a mapping from the device-tree */
if (of_irq_map_pci(pci_dev, &oirq)) { if (of_irq_parse_pci(pci_dev, &oirq)) {
u8 line, pin; u8 line, pin;
/* If that fails, lets fallback to what is in the config /* If that fails, lets fallback to what is in the config
......
...@@ -28,7 +28,7 @@ int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) ...@@ -28,7 +28,7 @@ int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
struct of_irq dev_irq; struct of_irq dev_irq;
int irq; int irq;
if (of_irq_map_pci(dev, &dev_irq)) { if (of_irq_parse_pci(dev, &dev_irq)) {
dev_err(&dev->dev, "trying to map irq for unknown slot:%d pin:%d\n", dev_err(&dev->dev, "trying to map irq for unknown slot:%d pin:%d\n",
slot, pin); slot, pin);
return 0; return 0;
......
...@@ -587,7 +587,7 @@ int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) ...@@ -587,7 +587,7 @@ int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
int err; int err;
int irq; int irq;
err = of_irq_map_pci(dev, &dev_irq); err = of_irq_parse_pci(dev, &dev_irq);
if (err) { if (err) {
pr_err("pci %s: unable to get irq map, err=%d\n", pr_err("pci %s: unable to get irq map, err=%d\n",
pci_name((struct pci_dev *) dev), err); pci_name((struct pci_dev *) dev), err);
......
...@@ -237,7 +237,7 @@ static int pci_read_irq_line(struct pci_dev *pci_dev) ...@@ -237,7 +237,7 @@ static int pci_read_irq_line(struct pci_dev *pci_dev)
memset(&oirq, 0xff, sizeof(oirq)); memset(&oirq, 0xff, sizeof(oirq));
#endif #endif
/* Try to get a mapping from the device-tree */ /* Try to get a mapping from the device-tree */
if (of_irq_map_pci(pci_dev, &oirq)) { if (of_irq_parse_pci(pci_dev, &oirq)) {
u8 line, pin; u8 line, pin;
/* If that fails, lets fallback to what is in the config /* If that fails, lets fallback to what is in the config
......
...@@ -507,7 +507,7 @@ static __init int celleb_setup_pciex(struct device_node *node, ...@@ -507,7 +507,7 @@ static __init int celleb_setup_pciex(struct device_node *node,
phb->ops = &scc_pciex_pci_ops; phb->ops = &scc_pciex_pci_ops;
/* internal interrupt handler */ /* internal interrupt handler */
if (of_irq_map_one(node, 1, &oirq)) { if (of_irq_parse_one(node, 1, &oirq)) {
pr_err("PCIEXC:Failed to map irq\n"); pr_err("PCIEXC:Failed to map irq\n");
goto error; goto error;
} }
......
...@@ -53,7 +53,7 @@ static int __init txx9_serial_init(void) ...@@ -53,7 +53,7 @@ static int __init txx9_serial_init(void)
if (!(txx9_serial_bitmap & (1<<i))) if (!(txx9_serial_bitmap & (1<<i)))
continue; continue;
if (of_irq_map_one(node, i, &irq)) if (of_irq_parse_one(node, i, &irq))
continue; continue;
if (of_address_to_resource(node, if (of_address_to_resource(node,
txx9_scc_tab[i].index, &res)) txx9_scc_tab[i].index, &res))
......
...@@ -236,7 +236,7 @@ static unsigned int __init spider_find_cascade_and_node(struct spider_pic *pic) ...@@ -236,7 +236,7 @@ static unsigned int __init spider_find_cascade_and_node(struct spider_pic *pic)
* tree in case the device-tree is ever fixed * tree in case the device-tree is ever fixed
*/ */
struct of_irq oirq; struct of_irq oirq;
if (of_irq_map_one(pic->host->of_node, 0, &oirq) == 0) { if (of_irq_parse_one(pic->host->of_node, 0, &oirq) == 0) {
virq = irq_create_of_mapping(oirq.controller, oirq.specifier, virq = irq_create_of_mapping(oirq.controller, oirq.specifier,
oirq.size); oirq.size);
return virq; return virq;
......
...@@ -182,7 +182,7 @@ static int __init spu_map_interrupts(struct spu *spu, struct device_node *np) ...@@ -182,7 +182,7 @@ static int __init spu_map_interrupts(struct spu *spu, struct device_node *np)
int i; int i;
for (i=0; i < 3; i++) { for (i=0; i < 3; i++) {
ret = of_irq_map_one(np, i, &oirq); ret = of_irq_parse_one(np, i, &oirq);
if (ret) { if (ret) {
pr_debug("spu_new: failed to get irq %d\n", i); pr_debug("spu_new: failed to get irq %d\n", i);
goto err; goto err;
......
...@@ -333,7 +333,7 @@ static void hpcd_final_uli5288(struct pci_dev *dev) ...@@ -333,7 +333,7 @@ static void hpcd_final_uli5288(struct pci_dev *dev)
laddr[0] = (hose->first_busno << 16) | (PCI_DEVFN(31, 0) << 8); laddr[0] = (hose->first_busno << 16) | (PCI_DEVFN(31, 0) << 8);
laddr[1] = laddr[2] = 0; laddr[1] = laddr[2] = 0;
of_irq_map_raw(hosenode, &pin, 1, laddr, &oirq); of_irq_parse_raw(hosenode, &pin, 1, laddr, &oirq);
virq = irq_create_of_mapping(oirq.controller, oirq.specifier, virq = irq_create_of_mapping(oirq.controller, oirq.specifier,
oirq.size); oirq.size);
dev->irq = virq; dev->irq = virq;
......
...@@ -393,7 +393,7 @@ static void __init pmac_pic_probe_oldstyle(void) ...@@ -393,7 +393,7 @@ static void __init pmac_pic_probe_oldstyle(void)
#endif #endif
} }
int of_irq_map_oldworld(struct device_node *device, int index, int of_irq_parse_oldworld(struct device_node *device, int index,
struct of_irq *out_irq) struct of_irq *out_irq)
{ {
const u32 *ints = NULL; const u32 *ints = NULL;
......
...@@ -55,7 +55,7 @@ void request_event_sources_irqs(struct device_node *np, ...@@ -55,7 +55,7 @@ void request_event_sources_irqs(struct device_node *np,
/* Else use normal interrupt tree parsing */ /* Else use normal interrupt tree parsing */
else { else {
/* First try to do a proper OF tree parsing */ /* First try to do a proper OF tree parsing */
for (index = 0; of_irq_map_one(np, index, &oirq) == 0; for (index = 0; of_irq_parse_one(np, index, &oirq) == 0;
index++) { index++) {
if (count > 15) if (count > 15)
break; break;
......
...@@ -63,7 +63,7 @@ static int mpic_msi_reserve_u3_hwirqs(struct mpic *mpic) ...@@ -63,7 +63,7 @@ static int mpic_msi_reserve_u3_hwirqs(struct mpic *mpic)
pr_debug("mpic: mapping hwirqs for %s\n", np->full_name); pr_debug("mpic: mapping hwirqs for %s\n", np->full_name);
index = 0; index = 0;
while (of_irq_map_one(np, index++, &oirq) == 0) { while (of_irq_parse_one(np, index++, &oirq) == 0) {
ops->xlate(mpic->irqhost, NULL, oirq.specifier, ops->xlate(mpic->irqhost, NULL, oirq.specifier,
oirq.size, &hwirq, &flags); oirq.size, &hwirq, &flags);
msi_bitmap_reserve_hwirq(&mpic->msi_bitmap, hwirq); msi_bitmap_reserve_hwirq(&mpic->msi_bitmap, hwirq);
......
...@@ -116,7 +116,7 @@ static int x86_of_pci_irq_enable(struct pci_dev *dev) ...@@ -116,7 +116,7 @@ static int x86_of_pci_irq_enable(struct pci_dev *dev)
if (!pin) if (!pin)
return 0; return 0;
ret = of_irq_map_pci(dev, &oirq); ret = of_irq_parse_pci(dev, &oirq);
if (ret) if (ret)
return ret; return ret;
......
...@@ -532,12 +532,12 @@ static u64 __of_translate_address(struct device_node *dev, ...@@ -532,12 +532,12 @@ static u64 __of_translate_address(struct device_node *dev,
pbus->count_cells(dev, &pna, &pns); pbus->count_cells(dev, &pna, &pns);
if (!OF_CHECK_COUNTS(pna, pns)) { if (!OF_CHECK_COUNTS(pna, pns)) {
printk(KERN_ERR "prom_parse: Bad cell count for %s\n", printk(KERN_ERR "prom_parse: Bad cell count for %s\n",
dev->full_name); of_node_full_name(dev));
break; break;
} }
pr_debug("OF: parent bus is %s (na=%d, ns=%d) on %s\n", pr_debug("OF: parent bus is %s (na=%d, ns=%d) on %s\n",
pbus->name, pna, pns, parent->full_name); pbus->name, pna, pns, of_node_full_name(parent));
/* Apply bus translation */ /* Apply bus translation */
if (of_translate_one(dev, bus, pbus, addr, na, ns, pna, rprop)) if (of_translate_one(dev, bus, pbus, addr, na, ns, pna, rprop))
......
...@@ -31,14 +31,14 @@ ...@@ -31,14 +31,14 @@
* @dev: Device node of the device whose interrupt is to be mapped * @dev: Device node of the device whose interrupt is to be mapped
* @index: Index of the interrupt to map * @index: Index of the interrupt to map
* *
* This function is a wrapper that chains of_irq_map_one() and * This function is a wrapper that chains of_irq_parse_one() and
* irq_create_of_mapping() to make things easier to callers * irq_create_of_mapping() to make things easier to callers
*/ */
unsigned int irq_of_parse_and_map(struct device_node *dev, int index) unsigned int irq_of_parse_and_map(struct device_node *dev, int index)
{ {
struct of_irq oirq; struct of_irq oirq;
if (of_irq_map_one(dev, index, &oirq)) if (of_irq_parse_one(dev, index, &oirq))
return 0; return 0;
return irq_create_of_mapping(oirq.controller, oirq.specifier, return irq_create_of_mapping(oirq.controller, oirq.specifier,
...@@ -79,7 +79,7 @@ struct device_node *of_irq_find_parent(struct device_node *child) ...@@ -79,7 +79,7 @@ struct device_node *of_irq_find_parent(struct device_node *child)
} }
/** /**
* of_irq_map_raw - Low level interrupt tree parsing * of_irq_parse_raw - Low level interrupt tree parsing
* @parent: the device interrupt parent * @parent: the device interrupt parent
* @intspec: interrupt specifier ("interrupts" property of the device) * @intspec: interrupt specifier ("interrupts" property of the device)
* @ointsize: size of the passed in interrupt specifier * @ointsize: size of the passed in interrupt specifier
...@@ -93,7 +93,7 @@ struct device_node *of_irq_find_parent(struct device_node *child) ...@@ -93,7 +93,7 @@ struct device_node *of_irq_find_parent(struct device_node *child)
* properties, for example when resolving PCI interrupts when no device * properties, for example when resolving PCI interrupts when no device
* node exist for the parent. * node exist for the parent.
*/ */
int of_irq_map_raw(struct device_node *parent, const __be32 *intspec, int of_irq_parse_raw(struct device_node *parent, const __be32 *intspec,
u32 ointsize, const __be32 *addr, struct of_irq *out_irq) u32 ointsize, const __be32 *addr, struct of_irq *out_irq)
{ {
struct device_node *ipar, *tnode, *old = NULL, *newpar = NULL; struct device_node *ipar, *tnode, *old = NULL, *newpar = NULL;
...@@ -101,7 +101,7 @@ int of_irq_map_raw(struct device_node *parent, const __be32 *intspec, ...@@ -101,7 +101,7 @@ int of_irq_map_raw(struct device_node *parent, const __be32 *intspec,
u32 intsize = 1, addrsize, newintsize = 0, newaddrsize = 0; u32 intsize = 1, addrsize, newintsize = 0, newaddrsize = 0;
int imaplen, match, i; int imaplen, match, i;
pr_debug("of_irq_map_raw: par=%s,intspec=[0x%08x 0x%08x...],ointsize=%d\n", pr_debug("of_irq_parse_raw: par=%s,intspec=[0x%08x 0x%08x...],ointsize=%d\n",
of_node_full_name(parent), be32_to_cpup(intspec), of_node_full_name(parent), be32_to_cpup(intspec),
be32_to_cpup(intspec + 1), ointsize); be32_to_cpup(intspec + 1), ointsize);
...@@ -126,7 +126,7 @@ int of_irq_map_raw(struct device_node *parent, const __be32 *intspec, ...@@ -126,7 +126,7 @@ int of_irq_map_raw(struct device_node *parent, const __be32 *intspec,
goto fail; goto fail;
} }
pr_debug("of_irq_map_raw: ipar=%s, size=%d\n", of_node_full_name(ipar), intsize); pr_debug("of_irq_parse_raw: ipar=%s, size=%d\n", of_node_full_name(ipar), intsize);
if (ointsize != intsize) if (ointsize != intsize)
return -EINVAL; return -EINVAL;
...@@ -269,29 +269,29 @@ int of_irq_map_raw(struct device_node *parent, const __be32 *intspec, ...@@ -269,29 +269,29 @@ int of_irq_map_raw(struct device_node *parent, const __be32 *intspec,
return -EINVAL; return -EINVAL;
} }
EXPORT_SYMBOL_GPL(of_irq_map_raw); EXPORT_SYMBOL_GPL(of_irq_parse_raw);
/** /**
* of_irq_map_one - Resolve an interrupt for a device * of_irq_parse_one - Resolve an interrupt for a device
* @device: the device whose interrupt is to be resolved * @device: the device whose interrupt is to be resolved
* @index: index of the interrupt to resolve * @index: index of the interrupt to resolve
* @out_irq: structure of_irq filled by this function * @out_irq: structure of_irq filled by this function
* *
* This function resolves an interrupt, walking the tree, for a given * This function resolves an interrupt, walking the tree, for a given
* device-tree node. It's the high level pendant to of_irq_map_raw(). * device-tree node. It's the high level pendant to of_irq_parse_raw().
*/ */
int of_irq_map_one(struct device_node *device, int index, struct of_irq *out_irq) int of_irq_parse_one(struct device_node *device, int index, struct of_irq *out_irq)
{ {
struct device_node *p; struct device_node *p;
const __be32 *intspec, *tmp, *addr; const __be32 *intspec, *tmp, *addr;
u32 intsize, intlen; u32 intsize, intlen;
int res = -EINVAL; int res = -EINVAL;
pr_debug("of_irq_map_one: dev=%s, index=%d\n", of_node_full_name(device), index); pr_debug("of_irq_parse_one: dev=%s, index=%d\n", of_node_full_name(device), index);
/* OldWorld mac stuff is "special", handle out of line */ /* OldWorld mac stuff is "special", handle out of line */
if (of_irq_workarounds & OF_IMAP_OLDWORLD_MAC) if (of_irq_workarounds & OF_IMAP_OLDWORLD_MAC)
return of_irq_map_oldworld(device, index, out_irq); return of_irq_parse_oldworld(device, index, out_irq);
/* Get the interrupts property */ /* Get the interrupts property */
intspec = of_get_property(device, "interrupts", &intlen); intspec = of_get_property(device, "interrupts", &intlen);
...@@ -322,13 +322,13 @@ int of_irq_map_one(struct device_node *device, int index, struct of_irq *out_irq ...@@ -322,13 +322,13 @@ int of_irq_map_one(struct device_node *device, int index, struct of_irq *out_irq
goto out; goto out;
/* Get new specifier and map it */ /* Get new specifier and map it */
res = of_irq_map_raw(p, intspec + index * intsize, intsize, res = of_irq_parse_raw(p, intspec + index * intsize, intsize,
addr, out_irq); addr, out_irq);
out: out:
of_node_put(p); of_node_put(p);
return res; return res;
} }
EXPORT_SYMBOL_GPL(of_irq_map_one); EXPORT_SYMBOL_GPL(of_irq_parse_one);
/** /**
* of_irq_to_resource - Decode a node's IRQ and return it as a resource * of_irq_to_resource - Decode a node's IRQ and return it as a resource
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#include <asm/prom.h> #include <asm/prom.h>
/** /**
* of_irq_map_pci - Resolve the interrupt for a PCI device * of_irq_parse_pci - Resolve the interrupt for a PCI device
* @pdev: the device whose interrupt is to be resolved * @pdev: the device whose interrupt is to be resolved
* @out_irq: structure of_irq filled by this function * @out_irq: structure of_irq filled by this function
* *
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
* PCI tree until an device-node is found, at which point it will finish * PCI tree until an device-node is found, at which point it will finish
* resolving using the OF tree walking. * resolving using the OF tree walking.
*/ */
int of_irq_map_pci(const struct pci_dev *pdev, struct of_irq *out_irq) int of_irq_parse_pci(const struct pci_dev *pdev, struct of_irq *out_irq)
{ {
struct device_node *dn, *ppnode; struct device_node *dn, *ppnode;
struct pci_dev *ppdev; struct pci_dev *ppdev;
...@@ -30,7 +30,7 @@ int of_irq_map_pci(const struct pci_dev *pdev, struct of_irq *out_irq) ...@@ -30,7 +30,7 @@ int of_irq_map_pci(const struct pci_dev *pdev, struct of_irq *out_irq)
*/ */
dn = pci_device_to_OF_node(pdev); dn = pci_device_to_OF_node(pdev);
if (dn) { if (dn) {
rc = of_irq_map_one(dn, 0, out_irq); rc = of_irq_parse_one(dn, 0, out_irq);
if (!rc) if (!rc)
return rc; return rc;
} }
...@@ -88,6 +88,6 @@ int of_irq_map_pci(const struct pci_dev *pdev, struct of_irq *out_irq) ...@@ -88,6 +88,6 @@ int of_irq_map_pci(const struct pci_dev *pdev, struct of_irq *out_irq)
lspec_be = cpu_to_be32(lspec); lspec_be = cpu_to_be32(lspec);
laddr[0] = cpu_to_be32((pdev->bus->number << 16) | (pdev->devfn << 8)); laddr[0] = cpu_to_be32((pdev->bus->number << 16) | (pdev->devfn << 8));
laddr[1] = laddr[2] = cpu_to_be32(0); laddr[1] = laddr[2] = cpu_to_be32(0);
return of_irq_map_raw(ppnode, &lspec_be, 1, laddr, out_irq); return of_irq_parse_raw(ppnode, &lspec_be, 1, laddr, out_irq);
} }
EXPORT_SYMBOL_GPL(of_irq_map_pci); EXPORT_SYMBOL_GPL(of_irq_parse_pci);
...@@ -650,7 +650,7 @@ static int __init mvebu_pcie_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) ...@@ -650,7 +650,7 @@ static int __init mvebu_pcie_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
struct of_irq oirq; struct of_irq oirq;
int ret; int ret;
ret = of_irq_map_pci(dev, &oirq); ret = of_irq_parse_pci(dev, &oirq);
if (ret) if (ret)
return ret; return ret;
......
...@@ -35,12 +35,12 @@ typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *); ...@@ -35,12 +35,12 @@ typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *);
#if defined(CONFIG_PPC32) && defined(CONFIG_PPC_PMAC) #if defined(CONFIG_PPC32) && defined(CONFIG_PPC_PMAC)
extern unsigned int of_irq_workarounds; extern unsigned int of_irq_workarounds;
extern struct device_node *of_irq_dflt_pic; extern struct device_node *of_irq_dflt_pic;
extern int of_irq_map_oldworld(struct device_node *device, int index, extern int of_irq_parse_oldworld(struct device_node *device, int index,
struct of_irq *out_irq); struct of_irq *out_irq);
#else /* CONFIG_PPC32 && CONFIG_PPC_PMAC */ #else /* CONFIG_PPC32 && CONFIG_PPC_PMAC */
#define of_irq_workarounds (0) #define of_irq_workarounds (0)
#define of_irq_dflt_pic (NULL) #define of_irq_dflt_pic (NULL)
static inline int of_irq_map_oldworld(struct device_node *device, int index, static inline int of_irq_parse_oldworld(struct device_node *device, int index,
struct of_irq *out_irq) struct of_irq *out_irq)
{ {
return -EINVAL; return -EINVAL;
...@@ -48,10 +48,10 @@ static inline int of_irq_map_oldworld(struct device_node *device, int index, ...@@ -48,10 +48,10 @@ static inline int of_irq_map_oldworld(struct device_node *device, int index,
#endif /* CONFIG_PPC32 && CONFIG_PPC_PMAC */ #endif /* CONFIG_PPC32 && CONFIG_PPC_PMAC */
extern int of_irq_map_raw(struct device_node *parent, const __be32 *intspec, extern int of_irq_parse_raw(struct device_node *parent, const __be32 *intspec,
u32 ointsize, const __be32 *addr, u32 ointsize, const __be32 *addr,
struct of_irq *out_irq); struct of_irq *out_irq);
extern int of_irq_map_one(struct device_node *device, int index, extern int of_irq_parse_one(struct device_node *device, int index,
struct of_irq *out_irq); struct of_irq *out_irq);
extern unsigned int irq_create_of_mapping(struct device_node *controller, extern unsigned int irq_create_of_mapping(struct device_node *controller,
const u32 *intspec, const u32 *intspec,
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
struct pci_dev; struct pci_dev;
struct of_irq; struct of_irq;
int of_irq_map_pci(const struct pci_dev *pdev, struct of_irq *out_irq); int of_irq_parse_pci(const struct pci_dev *pdev, struct of_irq *out_irq);
struct device_node; struct device_node;
struct device_node *of_pci_find_child_device(struct device_node *parent, struct device_node *of_pci_find_child_device(struct device_node *parent,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment