162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * ddbridge-io.h: Digital Devices bridge I/O inline functions 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2010-2017 Digital Devices GmbH 662306a36Sopenharmony_ci * Ralph Metzler <rjkm@metzlerbros.de> 762306a36Sopenharmony_ci * Marcus Metzler <mocm@metzlerbros.de> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef __DDBRIDGE_IO_H__ 1162306a36Sopenharmony_ci#define __DDBRIDGE_IO_H__ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <linux/io.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#include "ddbridge.h" 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci/******************************************************************************/ 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cistatic inline u32 ddblreadl(struct ddb_link *link, u32 adr) 2062306a36Sopenharmony_ci{ 2162306a36Sopenharmony_ci return readl(link->dev->regs + adr); 2262306a36Sopenharmony_ci} 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_cistatic inline void ddblwritel(struct ddb_link *link, u32 val, u32 adr) 2562306a36Sopenharmony_ci{ 2662306a36Sopenharmony_ci writel(val, link->dev->regs + adr); 2762306a36Sopenharmony_ci} 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_cistatic inline u32 ddbreadl(struct ddb *dev, u32 adr) 3062306a36Sopenharmony_ci{ 3162306a36Sopenharmony_ci return readl(dev->regs + adr); 3262306a36Sopenharmony_ci} 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistatic inline void ddbwritel(struct ddb *dev, u32 val, u32 adr) 3562306a36Sopenharmony_ci{ 3662306a36Sopenharmony_ci writel(val, dev->regs + adr); 3762306a36Sopenharmony_ci} 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_cistatic inline void ddbcpyto(struct ddb *dev, u32 adr, void *src, long count) 4062306a36Sopenharmony_ci{ 4162306a36Sopenharmony_ci memcpy_toio(dev->regs + adr, src, count); 4262306a36Sopenharmony_ci} 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_cistatic inline void ddbcpyfrom(struct ddb *dev, void *dst, u32 adr, long count) 4562306a36Sopenharmony_ci{ 4662306a36Sopenharmony_ci memcpy_fromio(dst, dev->regs + adr, count); 4762306a36Sopenharmony_ci} 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_cistatic inline u32 safe_ddbreadl(struct ddb *dev, u32 adr) 5062306a36Sopenharmony_ci{ 5162306a36Sopenharmony_ci u32 val = ddbreadl(dev, adr); 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci /* (ddb)readl returns (uint)-1 (all bits set) on failure, catch that */ 5462306a36Sopenharmony_ci if (val == ~0) { 5562306a36Sopenharmony_ci dev_err(&dev->pdev->dev, "ddbreadl failure, adr=%08x\n", adr); 5662306a36Sopenharmony_ci return 0; 5762306a36Sopenharmony_ci } 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci return val; 6062306a36Sopenharmony_ci} 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci#endif /* __DDBRIDGE_IO_H__ */ 63