Skip to content

Commit

Permalink
soc: fsl: guts: embed fsl_guts_get_svr() in probe()
Browse files Browse the repository at this point in the history
Move the reading of the SVR into the probe function as
fsl_guts_get_svr() is the only user of the static guts variable and this
lets us drop that as well as the malloc() for this variable. Also, we
can unmap the memory region after we accessed it, which will simplify
error handling later.

Signed-off-by: Michael Walle <[email protected]>
Acked-by: Arnd Bergmann <[email protected]>
Signed-off-by: Shawn Guo <[email protected]>
  • Loading branch information
mwalle authored and Shawn Guo committed Jun 27, 2022
1 parent 6de6cb8 commit ab4988d
Showing 1 changed file with 11 additions and 31 deletions.
42 changes: 11 additions & 31 deletions drivers/soc/fsl/guts.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,12 @@
#include <linux/platform_device.h>
#include <linux/fsl/guts.h>

struct guts {
struct ccsr_guts __iomem *regs;
bool little_endian;
};

struct fsl_soc_die_attr {
char *die;
u32 svr;
u32 mask;
};

static struct guts *guts;
static struct soc_device_attribute soc_dev_attr;


Expand Down Expand Up @@ -119,40 +113,27 @@ static const struct fsl_soc_die_attr *fsl_soc_die_match(
return NULL;
}

static u32 fsl_guts_get_svr(void)
{
u32 svr = 0;

if (!guts || !guts->regs)
return svr;

if (guts->little_endian)
svr = ioread32(&guts->regs->svr);
else
svr = ioread32be(&guts->regs->svr);

return svr;
}

static int fsl_guts_probe(struct platform_device *pdev)
{
struct device_node *root, *np = pdev->dev.of_node;
static struct soc_device *soc_dev;
struct device *dev = &pdev->dev;
const struct fsl_soc_die_attr *soc_die;
struct ccsr_guts __iomem *regs;
const char *machine = NULL;
bool little_endian;
u32 svr;

/* Initialize guts */
guts = devm_kzalloc(dev, sizeof(*guts), GFP_KERNEL);
if (!guts)
return -ENOMEM;

guts->little_endian = of_property_read_bool(np, "little-endian");
regs = of_iomap(np, 0);
if (IS_ERR(regs))
return PTR_ERR(regs);

guts->regs = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(guts->regs))
return PTR_ERR(guts->regs);
little_endian = of_property_read_bool(np, "little-endian");
if (little_endian)
svr = ioread32(&regs->svr);
else
svr = ioread32be(&regs->svr);
iounmap(regs);

/* Register soc device */
root = of_find_node_by_path("/");
Expand All @@ -167,7 +148,6 @@ static int fsl_guts_probe(struct platform_device *pdev)
}
of_node_put(root);

svr = fsl_guts_get_svr();
soc_die = fsl_soc_die_match(svr, fsl_soc_die);
if (soc_die) {
soc_dev_attr.family = devm_kasprintf(dev, GFP_KERNEL,
Expand Down

0 comments on commit ab4988d

Please sign in to comment.