xref: /rk3399_rockchip-uboot/drivers/pch/pch-uclass.c (revision ca831f4933dc68d9ed1b6399cbda90068c520005)
1*ca831f49SSimon Glass /*
2*ca831f49SSimon Glass  * Copyright (c) 2015 Google, Inc
3*ca831f49SSimon Glass  * Written by Simon Glass <sjg@chromium.org>
4*ca831f49SSimon Glass  *
5*ca831f49SSimon Glass  * SPDX-License-Identifier:	GPL-2.0+
6*ca831f49SSimon Glass  */
7*ca831f49SSimon Glass 
8*ca831f49SSimon Glass #include <common.h>
9*ca831f49SSimon Glass #include <dm.h>
10*ca831f49SSimon Glass #include <pch.h>
11*ca831f49SSimon Glass #include <dm/root.h>
12*ca831f49SSimon Glass 
13*ca831f49SSimon Glass DECLARE_GLOBAL_DATA_PTR;
14*ca831f49SSimon Glass 
15*ca831f49SSimon Glass int pch_get_sbase(struct udevice *dev, ulong *sbasep)
16*ca831f49SSimon Glass {
17*ca831f49SSimon Glass 	struct pch_ops *ops = pch_get_ops(dev);
18*ca831f49SSimon Glass 
19*ca831f49SSimon Glass 	*sbasep = 0;
20*ca831f49SSimon Glass 	if (!ops->get_sbase)
21*ca831f49SSimon Glass 		return -ENOSYS;
22*ca831f49SSimon Glass 
23*ca831f49SSimon Glass 	return ops->get_sbase(dev, sbasep);
24*ca831f49SSimon Glass }
25*ca831f49SSimon Glass 
26*ca831f49SSimon Glass enum pch_version pch_get_version(struct udevice *dev)
27*ca831f49SSimon Glass {
28*ca831f49SSimon Glass 	struct pch_ops *ops = pch_get_ops(dev);
29*ca831f49SSimon Glass 
30*ca831f49SSimon Glass 	if (!ops->get_version)
31*ca831f49SSimon Glass 		return -ENOSYS;
32*ca831f49SSimon Glass 
33*ca831f49SSimon Glass 	return ops->get_version(dev);
34*ca831f49SSimon Glass }
35*ca831f49SSimon Glass 
36*ca831f49SSimon Glass int pch_set_spi_protect(struct udevice *dev, bool protect)
37*ca831f49SSimon Glass {
38*ca831f49SSimon Glass 	struct pch_ops *ops = pch_get_ops(dev);
39*ca831f49SSimon Glass 
40*ca831f49SSimon Glass 	if (!ops->set_spi_protect)
41*ca831f49SSimon Glass 		return -ENOSYS;
42*ca831f49SSimon Glass 
43*ca831f49SSimon Glass 	return ops->set_spi_protect(dev, protect);
44*ca831f49SSimon Glass }
45*ca831f49SSimon Glass 
46*ca831f49SSimon Glass static int pch_uclass_post_bind(struct udevice *bus)
47*ca831f49SSimon Glass {
48*ca831f49SSimon Glass 	/*
49*ca831f49SSimon Glass 	 * Scan the device tree for devices
50*ca831f49SSimon Glass 	 *
51*ca831f49SSimon Glass 	 * Before relocation, only bind devices marked for pre-relocation
52*ca831f49SSimon Glass 	 * use.
53*ca831f49SSimon Glass 	 */
54*ca831f49SSimon Glass 	return dm_scan_fdt_node(bus, gd->fdt_blob, bus->of_offset,
55*ca831f49SSimon Glass 				gd->flags & GD_FLG_RELOC ? false : true);
56*ca831f49SSimon Glass }
57*ca831f49SSimon Glass 
58*ca831f49SSimon Glass UCLASS_DRIVER(pch) = {
59*ca831f49SSimon Glass 	.id		= UCLASS_PCH,
60*ca831f49SSimon Glass 	.name		= "pch",
61*ca831f49SSimon Glass 	.post_bind	= pch_uclass_post_bind,
62*ca831f49SSimon Glass };
63