Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp5059169imu; Tue, 25 Dec 2018 16:46:42 -0800 (PST) X-Google-Smtp-Source: ALg8bN58dGSCe9bYzFqn8+lCrikUU9VI1MPLPqhXYo8WJWQWveHWD16xf5V0yHN8O0s4HtMg/Oa5 X-Received: by 2002:a17:902:59c8:: with SMTP id d8mr17924214plj.116.1545785202381; Tue, 25 Dec 2018 16:46:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1545785202; cv=none; d=google.com; s=arc-20160816; b=wG51/j05wT4Jjnxe8TNQDhvzuBd8AngcvYXXfABNYOdWwh1UiLBkpLObJbgTyE34YM urcqyChmauJ6OVUCvtCBAq6bCquTej877K5qWsurDigj1iU9CqsZG5BJcU9FrOIvSEae 2Wt737p9QSwMiR7+XvsrgayUDAScH1usqsigKMrcmNnyh4xEoLvhnpOUQS8bqchksDhk GCH24aZJbh9ruPF3R8xX8qH1sc0zVfWil8UIhLvL17D+xWyqyz4uZxmQ2e+fxEQvm65d 3j9ghCWdxrvxKkj8Jg/q9HM8kCoLqP2W/WXeQNBygRlyspiEJlKFXvuyVNluKnwaBt1i tlkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:subject:from:references:in-reply-to :message-id:cc:to; bh=rRgwJp7x1aXZLJJrZVJPlJq14Yft7RyZH7PIYgJjXnc=; b=OknUYeX3faD2ytGPUu9l+S98e+vWGPumQqVupHazLOHzuifDnD/Yn573ls3hIs/8Tp u0asUZlhLHJxuqUhKmSmu69mdK4INOl2GEyQReJGxaQv4lakr7gJrUpI6jad0VE7t/rC sEDnPbs4XImQBQwxHblHFSdF2yAACIP8dB7acdSvo2SWpo8pgnV0EQcNv8JvfnvBNdq5 R2PpNVcmscaRURA8x7Vd+9SZdDSwZ6Gi+u2iOTe62rtO+ZeoT3FNy+bZkRb4BJAUYKpX YIxa1m/J4OY6Qjl5jWQ3ISqcmo+QYRynPj90HYqv8hZliLvBe77H0mWmGgBO7egWjUae mXrw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b11si31895046pfo.240.2018.12.25.16.46.06; Tue, 25 Dec 2018 16:46:42 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729643AbeLZAoG (ORCPT + 99 others); Tue, 25 Dec 2018 19:44:06 -0500 Received: from kvm5.telegraphics.com.au ([98.124.60.144]:57356 "EHLO kvm5.telegraphics.com.au" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726003AbeLZAoA (ORCPT ); Tue, 25 Dec 2018 19:44:00 -0500 Received: by kvm5.telegraphics.com.au (Postfix, from userid 502) id 4F2A029522; Tue, 25 Dec 2018 19:43:56 -0500 (EST) To: Arnd Bergmann , Greg Kroah-Hartman , Joshua Thompson , Geert Uytterhoeven Cc: linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linuxppc-dev@lists.ozlabs.org Message-Id: <9a2226a05c8b1e142ee060a40c30ed803607ae44.1545784679.git.fthain@telegraphics.com.au> In-Reply-To: References: From: Finn Thain Subject: [PATCH v8 12/25] m68k/mac: Fix PRAM accessors Date: Wed, 26 Dec 2018 11:37:59 +1100 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PMU-based m68k Macs pre-date PowerMac-style NVRAM. Use the appropriate PMU commands. Also implement the missing XPRAM accessors for VIA-based Macs. Signed-off-by: Finn Thain Acked-by: Geert Uytterhoeven Tested-by: Stan Johnson --- Changed since v7: - Updated PMU response decoding due to via-pmu68k driver replacement. --- arch/m68k/mac/misc.c | 43 ++++++++++++++++++++++++++++++---------- include/uapi/linux/pmu.h | 2 ++ 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/arch/m68k/mac/misc.c b/arch/m68k/mac/misc.c index 475c93e4048c..0009efebb264 100644 --- a/arch/m68k/mac/misc.c +++ b/arch/m68k/mac/misc.c @@ -66,23 +66,22 @@ static unsigned char pmu_pram_read_byte(int offset) { struct adb_request req; - if (pmu_request(&req, NULL, 3, PMU_READ_NVRAM, - (offset >> 8) & 0xFF, offset & 0xFF) < 0) + if (pmu_request(&req, NULL, 3, PMU_READ_XPRAM, + offset & 0xFF, 1) < 0) return 0; - while (!req.complete) - pmu_poll(); - return req.reply[3]; + pmu_wait_complete(&req); + + return req.reply[0]; } static void pmu_pram_write_byte(unsigned char data, int offset) { struct adb_request req; - if (pmu_request(&req, NULL, 4, PMU_WRITE_NVRAM, - (offset >> 8) & 0xFF, offset & 0xFF, data) < 0) + if (pmu_request(&req, NULL, 4, PMU_WRITE_XPRAM, + offset & 0xFF, 1, data) < 0) return; - while (!req.complete) - pmu_poll(); + pmu_wait_complete(&req); } #endif /* CONFIG_ADB_PMU */ @@ -151,6 +150,16 @@ static void via_rtc_send(__u8 data) #define RTC_REG_SECONDS_3 3 #define RTC_REG_WRITE_PROTECT 13 +/* + * Inside Mac has no information about two-byte RTC commands but + * the MAME/MESS source code has the essentials. + */ + +#define RTC_REG_XPRAM 14 +#define RTC_CMD_XPRAM_READ (RTC_CMD_READ(RTC_REG_XPRAM) << 8) +#define RTC_CMD_XPRAM_WRITE (RTC_CMD_WRITE(RTC_REG_XPRAM) << 8) +#define RTC_CMD_XPRAM_ARG(a) (((a & 0xE0) << 3) | ((a & 0x1F) << 2)) + /* * Execute a VIA PRAM/RTC command. For read commands * data should point to a one-byte buffer for the @@ -198,11 +207,25 @@ static void via_rtc_command(int command, __u8 *data) static unsigned char via_pram_read_byte(int offset) { - return 0; + unsigned char temp; + + via_rtc_command(RTC_CMD_XPRAM_READ | RTC_CMD_XPRAM_ARG(offset), &temp); + + return temp; } static void via_pram_write_byte(unsigned char data, int offset) { + unsigned char temp; + + temp = 0x55; + via_rtc_command(RTC_CMD_WRITE(RTC_REG_WRITE_PROTECT), &temp); + + temp = data; + via_rtc_command(RTC_CMD_XPRAM_WRITE | RTC_CMD_XPRAM_ARG(offset), &temp); + + temp = 0x55 | RTC_FLG_WRITE_PROTECT; + via_rtc_command(RTC_CMD_WRITE(RTC_REG_WRITE_PROTECT), &temp); } /* diff --git a/include/uapi/linux/pmu.h b/include/uapi/linux/pmu.h index 97256f90e6df..f2fc1bd80017 100644 --- a/include/uapi/linux/pmu.h +++ b/include/uapi/linux/pmu.h @@ -19,7 +19,9 @@ #define PMU_POWER_CTRL 0x11 /* control power of some devices */ #define PMU_ADB_CMD 0x20 /* send ADB packet */ #define PMU_ADB_POLL_OFF 0x21 /* disable ADB auto-poll */ +#define PMU_WRITE_XPRAM 0x32 /* write eXtended Parameter RAM */ #define PMU_WRITE_NVRAM 0x33 /* write non-volatile RAM */ +#define PMU_READ_XPRAM 0x3a /* read eXtended Parameter RAM */ #define PMU_READ_NVRAM 0x3b /* read non-volatile RAM */ #define PMU_SET_RTC 0x30 /* set real-time clock */ #define PMU_READ_RTC 0x38 /* read real-time clock */ -- 2.19.2