/* * Copyright (C) 2021 Marvell International Ltd. * * SPDX-License-Identifier: BSD-3-Clause * https://spdx.org/licenses */ #include "ddr_phy_access.h" #include #include #include #define DDR_PHY_END_ADDRESS 0x100000 #ifdef DDR_PHY_DEBUG #define debug_printf(...) printf(__VA_ARGS__) #else #define debug_printf(...) #endif /* * This routine writes 'data' to specified 'address' offset, * with optional debug print support */ int snps_fw_write(uintptr_t offset, uint16_t data) { debug_printf("In %s\n", __func__); if (offset < DDR_PHY_END_ADDRESS) { mmio_write_16(DDR_PHY_BASE_ADDR + (2 * offset), data); return 0; } debug_printf("%s: illegal offset value: 0x%x\n", __func__, offset); return -EINVAL; } int snps_fw_read(uintptr_t offset, uint16_t *read) { debug_printf("In %s\n", __func__); if (offset < DDR_PHY_END_ADDRESS) { *read = mmio_read_16(DDR_PHY_BASE_ADDR + (2 * offset)); return 0; } debug_printf("%s: illegal offset value: 0x%x\n", __func__, offset); return -EINVAL; } int mvebu_ddr_phy_write(uintptr_t offset, uint16_t data) { return snps_fw_write(offset, data); } int mvebu_ddr_phy_read(uintptr_t offset, uint16_t *read) { return snps_fw_read(offset, read); }