Commit 2500763d authored by Rob Herring's avatar Rob Herring Committed by Michael Ellerman
Browse files

powerpc: Use of_address_to_resource()



Replace open coded reading of "reg" or of_get_address()/
of_translate_address() calls with a single call to
of_address_to_resource().

Signed-off-by: default avatarRob Herring <robh@kernel.org>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20230329220337.141295-1-robh@kernel.org
parent 83a8fe56
Loading
Loading
Loading
Loading
+7 −14
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#include <linux/cpu.h>
#include <linux/notifier.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/pfn.h>
#include <linux/cpuset.h>
#include <linux/node.h>
@@ -1288,23 +1289,15 @@ static int hot_add_node_scn_to_nid(unsigned long scn_addr)
	int nid = NUMA_NO_NODE;

	for_each_node_by_type(memory, "memory") {
		unsigned long start, size;
		int ranges;
		const __be32 *memcell_buf;
		unsigned int len;

		memcell_buf = of_get_property(memory, "reg", &len);
		if (!memcell_buf || len <= 0)
			continue;
		int i = 0;

		/* ranges in cell */
		ranges = (len >> 2) / (n_mem_addr_cells + n_mem_size_cells);
		while (1) {
			struct resource res;

		while (ranges--) {
			start = read_n_cells(n_mem_addr_cells, &memcell_buf);
			size = read_n_cells(n_mem_size_cells, &memcell_buf);
			if (of_address_to_resource(memory, i++, &res))
				break;

			if ((scn_addr < start) || (scn_addr >= (start + size)))
			if ((scn_addr < res.start) || (scn_addr > res.end))
				continue;

			nid = of_node_to_nid_single(memory);
+3 −6
Original line number Diff line number Diff line
@@ -54,8 +54,7 @@ static int lite5200_pm_prepare(void)
		{ .type = "builtin", .compatible = "mpc5200", }, /* efika */
		{}
	};
	u64 regaddr64 = 0;
	const u32 *regaddr_p;
	struct resource res;

	/* deep sleep? let mpc52xx code handle that */
	if (lite5200_pm_target_state == PM_SUSPEND_STANDBY)
@@ -66,12 +65,10 @@ static int lite5200_pm_prepare(void)

	/* map registers */
	np = of_find_matching_node(NULL, immr_ids);
	regaddr_p = of_get_address(np, 0, NULL, NULL);
	if (regaddr_p)
		regaddr64 = of_translate_address(np, regaddr_p);
	of_address_to_resource(np, 0, &res);
	of_node_put(np);

	mbar = ioremap((u32) regaddr64, 0xC000);
	mbar = ioremap(res.start, 0xC000);
	if (!mbar) {
		printk(KERN_ERR "%s:%i Error mapping registers\n", __func__, __LINE__);
		return -ENOSYS;
+4 −5
Original line number Diff line number Diff line
@@ -460,15 +460,14 @@ DEFINE_SIMPLE_ATTRIBUTE(fops_msic, msic_get, msic_set, "%llu\n");
void axon_msi_debug_setup(struct device_node *dn, struct axon_msic *msic)
{
	char name[8];
	u64 addr;
	struct resource res;

	addr = of_translate_address(dn, of_get_property(dn, "reg", NULL));
	if (addr == OF_BAD_ADDR) {
		pr_devel("axon_msi: couldn't translate reg property\n");
	if (of_address_to_resource(dn, 0, &res)) {
		pr_devel("axon_msi: couldn't get reg property\n");
		return;
	}

	msic->trigger = ioremap(addr, 0x4);
	msic->trigger = ioremap(res.start, 0x4);
	if (!msic->trigger) {
		pr_devel("axon_msi: ioremap failed\n");
		return;
+3 −4
Original line number Diff line number Diff line
@@ -205,16 +205,15 @@ static void __noreturn holly_restart(char *cmd)
	__be32 __iomem *ocn_bar1 = NULL;
	unsigned long bar;
	struct device_node *bridge = NULL;
	const void *prop;
	int size;
	struct resource res;
	phys_addr_t addr = 0xc0000000;

	local_irq_disable();

	bridge = of_find_node_by_type(NULL, "tsi-bridge");
	if (bridge) {
		prop = of_get_property(bridge, "reg", &size);
		addr = of_translate_address(bridge, prop);
		of_address_to_resource(bridge, 0, &res);
		addr = res.start;
		of_node_put(bridge);
	}
	addr += (TSI108_PB_OFFSET + 0x414);
+10 −7
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
#include <linux/serial_reg.h>
#include <linux/serial_8250.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <asm/io.h>
#include <asm/termbits.h>

@@ -114,22 +115,24 @@ static void __init ls_uart_init(void)
static int __init ls_uarts_init(void)
{
	struct device_node *avr;
	phys_addr_t phys_addr;
	int len;
	struct resource res;
	int len, ret;

	avr = of_find_node_by_path("/soc10x/serial@80004500");
	if (!avr)
		return -EINVAL;

	avr_clock = *(u32*)of_get_property(avr, "clock-frequency", &len);
	phys_addr = ((u32*)of_get_property(avr, "reg", &len))[0];
	if (!avr_clock)
		return -EINVAL;

	of_node_put(avr);
	ret = of_address_to_resource(avr, 0, &res);
	if (ret)
		return ret;

	if (!avr_clock || !phys_addr)
		return -EINVAL;
	of_node_put(avr);

	avr_addr = ioremap(phys_addr, 32);
	avr_addr = ioremap(res.start, 32);
	if (!avr_addr)
		return -EFAULT;

Loading