Commit 079dea00 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Corey Minyard
Browse files

ipmi_si: Switch to use platform_get_mem_or_io()



Switch to use new platform_get_mem_or_io() instead of home grown analogue.
Note, we also introduce ipmi_set_addr_data_and_space() helper here.

Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Message-Id: <20210402174334.13466-2-andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarCorey Minyard <cminyard@mvista.com>
parent c053c4eb
Loading
Loading
Loading
Loading
+14 −20
Original line number Diff line number Diff line
@@ -100,32 +100,31 @@ static int acpi_gpe_irq_setup(struct si_sm_io *io)
}
#endif

static void ipmi_set_addr_data_and_space(struct resource *r, struct si_sm_io *io)
{
	if (resource_type(r) == IORESOURCE_IO)
		io->addr_space = IPMI_IO_ADDR_SPACE;
	else
		io->addr_space = IPMI_MEM_ADDR_SPACE;
	io->addr_data = r->start;
}

static struct resource *
ipmi_get_info_from_resources(struct platform_device *pdev,
			     struct si_sm_io *io)
{
	struct resource *res, *res_second;

	res = platform_get_resource(pdev, IORESOURCE_IO, 0);
	if (res) {
		io->addr_space = IPMI_IO_ADDR_SPACE;
	} else {
		res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
		if (res)
			io->addr_space = IPMI_MEM_ADDR_SPACE;
	}
	res = platform_get_mem_or_io(pdev, 0);
	if (!res) {
		dev_err(&pdev->dev, "no I/O or memory address\n");
		return NULL;
	}
	io->addr_data = res->start;
	ipmi_set_addr_data_and_space(res, io);

	io->regspacing = DEFAULT_REGSPACING;
	res_second = platform_get_resource(pdev,
			       (io->addr_space == IPMI_IO_ADDR_SPACE) ?
					IORESOURCE_IO : IORESOURCE_MEM,
			       1);
	if (res_second) {
	res_second = platform_get_mem_or_io(pdev, 1);
	if (res_second && resource_type(res_second) == resource_type(res)) {
		if (res_second->start > io->addr_data)
			io->regspacing = res_second->start - io->addr_data;
	}
@@ -275,12 +274,7 @@ static int of_ipmi_probe(struct platform_device *pdev)
	io.addr_source	= SI_DEVICETREE;
	io.irq_setup	= ipmi_std_irq_setup;

	if (resource.flags & IORESOURCE_IO)
		io.addr_space = IPMI_IO_ADDR_SPACE;
	else
		io.addr_space = IPMI_MEM_ADDR_SPACE;

	io.addr_data	= resource.start;
	ipmi_set_addr_data_and_space(&resource, &io);

	io.regsize	= regsize ? be32_to_cpup(regsize) : DEFAULT_REGSIZE;
	io.regspacing	= regspacing ? be32_to_cpup(regspacing) : DEFAULT_REGSPACING;