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