66 lines
1.4 KiB
C
66 lines
1.4 KiB
C
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
|
|
/*
|
|
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __SOC_IO_H
|
|
#define __SOC_IO_H
|
|
|
|
#include <linux/amlogic/media/registers/register_map.h>
|
|
#include <linux/io.h>
|
|
|
|
/* vpp simple io */
|
|
static inline int aml_read_vcbus_s(unsigned int reg)
|
|
{
|
|
return readl((vpp_base + (reg << 2)));
|
|
}
|
|
|
|
static inline void aml_write_vcbus_s(unsigned int reg, unsigned int val)
|
|
{
|
|
writel(val, (vpp_base + (reg << 2)));
|
|
}
|
|
|
|
static inline void aml_vcbus_update_bits_s(unsigned int reg,
|
|
unsigned int value,
|
|
unsigned int start,
|
|
unsigned int len)
|
|
{
|
|
unsigned int tmp, orig;
|
|
unsigned int mask = (((1L << len) - 1) << start);
|
|
int r = (reg << 2);
|
|
|
|
orig = readl((vpp_base + r));
|
|
tmp = orig & ~mask;
|
|
tmp |= (value << start) & mask;
|
|
writel(tmp, (vpp_base + r));
|
|
}
|
|
|
|
/* hiu simple io */
|
|
static inline int aml_read_hiubus_s(unsigned int reg)
|
|
{
|
|
return readl((hiu_base + (reg << 2)));
|
|
}
|
|
|
|
static inline void aml_write_hiubus_s(unsigned int reg,
|
|
unsigned int val)
|
|
{
|
|
writel(val, (hiu_base + (reg << 2)));
|
|
}
|
|
|
|
static inline void aml_hiubus_update_bits_s(unsigned int reg,
|
|
unsigned int value,
|
|
unsigned int start,
|
|
unsigned int len)
|
|
{
|
|
unsigned int tmp, orig;
|
|
unsigned int mask = (((1L << len) - 1) << start);
|
|
int r = (reg << 2);
|
|
|
|
orig = readl((hiu_base + r));
|
|
tmp = orig & ~mask;
|
|
tmp |= (value << start) & mask;
|
|
writel(tmp, (hiu_base + r));
|
|
}
|
|
|
|
#endif
|