18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * ddbridge-io.h: Digital Devices bridge I/O inline functions 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2010-2017 Digital Devices GmbH 68c2ecf20Sopenharmony_ci * Ralph Metzler <rjkm@metzlerbros.de> 78c2ecf20Sopenharmony_ci * Marcus Metzler <mocm@metzlerbros.de> 88c2ecf20Sopenharmony_ci * 98c2ecf20Sopenharmony_ci * This program is free software; you can redistribute it and/or 108c2ecf20Sopenharmony_ci * modify it under the terms of the GNU General Public License 118c2ecf20Sopenharmony_ci * version 2 only, as published by the Free Software Foundation. 128c2ecf20Sopenharmony_ci * 138c2ecf20Sopenharmony_ci * This program is distributed in the hope that it will be useful, 148c2ecf20Sopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 158c2ecf20Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 168c2ecf20Sopenharmony_ci * GNU General Public License for more details. 178c2ecf20Sopenharmony_ci */ 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci#ifndef __DDBRIDGE_IO_H__ 208c2ecf20Sopenharmony_ci#define __DDBRIDGE_IO_H__ 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci#include <linux/io.h> 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci#include "ddbridge.h" 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci/******************************************************************************/ 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_cistatic inline u32 ddblreadl(struct ddb_link *link, u32 adr) 298c2ecf20Sopenharmony_ci{ 308c2ecf20Sopenharmony_ci return readl(link->dev->regs + adr); 318c2ecf20Sopenharmony_ci} 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_cistatic inline void ddblwritel(struct ddb_link *link, u32 val, u32 adr) 348c2ecf20Sopenharmony_ci{ 358c2ecf20Sopenharmony_ci writel(val, link->dev->regs + adr); 368c2ecf20Sopenharmony_ci} 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_cistatic inline u32 ddbreadl(struct ddb *dev, u32 adr) 398c2ecf20Sopenharmony_ci{ 408c2ecf20Sopenharmony_ci return readl(dev->regs + adr); 418c2ecf20Sopenharmony_ci} 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_cistatic inline void ddbwritel(struct ddb *dev, u32 val, u32 adr) 448c2ecf20Sopenharmony_ci{ 458c2ecf20Sopenharmony_ci writel(val, dev->regs + adr); 468c2ecf20Sopenharmony_ci} 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_cistatic inline void ddbcpyto(struct ddb *dev, u32 adr, void *src, long count) 498c2ecf20Sopenharmony_ci{ 508c2ecf20Sopenharmony_ci memcpy_toio(dev->regs + adr, src, count); 518c2ecf20Sopenharmony_ci} 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_cistatic inline void ddbcpyfrom(struct ddb *dev, void *dst, u32 adr, long count) 548c2ecf20Sopenharmony_ci{ 558c2ecf20Sopenharmony_ci memcpy_fromio(dst, dev->regs + adr, count); 568c2ecf20Sopenharmony_ci} 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_cistatic inline u32 safe_ddbreadl(struct ddb *dev, u32 adr) 598c2ecf20Sopenharmony_ci{ 608c2ecf20Sopenharmony_ci u32 val = ddbreadl(dev, adr); 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci /* (ddb)readl returns (uint)-1 (all bits set) on failure, catch that */ 638c2ecf20Sopenharmony_ci if (val == ~0) { 648c2ecf20Sopenharmony_ci dev_err(&dev->pdev->dev, "ddbreadl failure, adr=%08x\n", adr); 658c2ecf20Sopenharmony_ci return 0; 668c2ecf20Sopenharmony_ci } 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ci return val; 698c2ecf20Sopenharmony_ci} 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ci#endif /* __DDBRIDGE_IO_H__ */ 72