// SPDX-License-Identifier: GPL-2.0+
/*
 * (C) 2019 Angelo Dureghello <angelo.dureghello@timesys.com>
 */

#include <common.h>
#include <asm/global_data.h>
#include <linux/libfdt.h>
#include <fdt_support.h>

DECLARE_GLOBAL_DATA_PTR;

#if defined(CONFIG_MCFFEC) || defined(CONFIG_FSLDMAFEC)
static int fec_get_node(int fec_idx)
{
	char fec_alias[5] = {"fec"};
	const char *path;
	int node;

	if (fec_idx > 1) {
		puts("Invalid MII base index");
		return -ENOENT;
	}

	fec_alias[3] = fec_idx + '0';

	path = fdt_get_alias(gd->fdt_blob, fec_alias);
	if (!path) {
		puts("Invalid MII path");
		return -ENOENT;
	}

	node = fdt_path_offset(gd->fdt_blob, path);
	if (node < 0)
		return -ENOENT;

	return node;
}

int fec_get_fdt_prop(int fec_idx, const char *prop, u32 *value)
{
	int node;
	const u32 *val;

	node = fec_get_node(fec_idx);
	if (node < 0)
		return node;

	val = fdt_getprop(gd->fdt_blob, node, prop, NULL);
	if (!val)
		return -ENOENT;

	*value = fdt32_to_cpu(*val);

	return 0;
}

int fec_get_base_addr(int fec_idx, u32 *fec_iobase)
{
	int node;
	fdt_size_t size;
	fdt_addr_t addr;

	node = fec_get_node(fec_idx);
	if (node < 0)
		return node;

	addr = fdtdec_get_addr_size(gd->fdt_blob, node, "reg", &size);

	*fec_iobase = (u32)addr;

	return 0;
}

int fec_get_mii_base(int fec_idx, u32 *mii_base)
{
	return fec_get_fdt_prop(fec_idx, "mii-base", mii_base);
}

#endif //CONFIG_MCFFEC || CONFIG_FSLDMAFEC
