From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752726AbbCSJ0B (ORCPT ); Thu, 19 Mar 2015 05:26:01 -0400 Received: from mail-bn1on0114.outbound.protection.outlook.com ([157.56.110.114]:56788 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751034AbbCSJZ5 (ORCPT ); Thu, 19 Mar 2015 05:25:57 -0400 X-WSS-ID: 0NLGB92-07-6JI-02 X-M-MSG: Message-ID: <550A8DF2.1010104@amd.com> Date: Thu, 19 Mar 2015 09:50:58 +0100 From: =?windows-1252?Q?Christian_K=F6nig?= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: David Miller , CC: , Subject: Re: [PATCH] radeon: Do not directly dereference pointers to BIOS area. References: <20150318.231840.1263267500500914630.davem@davemloft.net> In-Reply-To: <20150318.231840.1263267500500914630.davem@davemloft.net> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.224.152.254] X-EOPAttributedMessage: 0 Authentication-Results: spf=none (sender IP is 165.204.84.221) smtp.mailfrom=Christian.Koenig@amd.com; davemloft.net; dkim=none (message not signed) header.d=none; X-Forefront-Antispam-Report: CIP:165.204.84.221;CTRY:US;IPV:NLI;EFV:NLI;BMV:1;SFV:NSPM;SFS:(10019020)(6009001)(428002)(189002)(51704005)(199003)(24454002)(105586002)(47776003)(64126003)(65816999)(76176999)(54356999)(33656002)(86362001)(50986999)(101416001)(83506001)(65806001)(36756003)(2950100001)(106466001)(65956001)(77156002)(92566002)(62966003)(46102003)(87266999)(50466002)(23746002)(19580395003)(77096005)(19580405001)(80316001)(87936001)(3940600001);DIR:OUT;SFP:1102;SCL:1;SRVR:DM2PR02MB1307;H:atltwp01.amd.com;FPR:;SPF:None;MLV:sfv;MX:1;A:1;LANG:en; X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM2PR02MB1307; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(5002010);SRVR:DM2PR02MB1307;BCL:0;PCL:0;RULEID:;SRVR:DM2PR02MB1307; X-Forefront-PRVS: 052017CAF1 X-OriginatorOrg: amd4.onmicrosoft.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Mar 2015 08:51:05.1922 (UTC) X-MS-Exchange-CrossTenant-Id: fde4dada-be84-483f-92cc-e026cbee8e96 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=fde4dada-be84-483f-92cc-e026cbee8e96;Ip=[165.204.84.221];Helo=[atltwp01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR02MB1307 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In general I would say yes, but for this particular hardware it's a bit questionable to do so. For radeon hardware to work correctly the CPU access to the PCIE BARs should work even without using the specialized IO macros/functions, otherwise mapping VRAM CPU accessible isn't really possible. What's the background of the change? Some problems on a certain CPU platform? or just general cleanups? Regards, Christian. On 19.03.2015 04:18, David Miller wrote: > Use readb() and memcpy_fromio() accessors instead. > > Signed-off-by: David S. Miller > > diff --git a/drivers/gpu/drm/radeon/radeon_bios.c b/drivers/gpu/drm/radeon/radeon_bios.c > index 63ccb8f..d27e4cc 100644 > --- a/drivers/gpu/drm/radeon/radeon_bios.c > +++ b/drivers/gpu/drm/radeon/radeon_bios.c > @@ -76,7 +76,7 @@ static bool igp_read_bios_from_vram(struct radeon_device *rdev) > > static bool radeon_read_bios(struct radeon_device *rdev) > { > - uint8_t __iomem *bios; > + uint8_t __iomem *bios, val1, val2; > size_t size; > > rdev->bios = NULL; > @@ -86,15 +86,19 @@ static bool radeon_read_bios(struct radeon_device *rdev) > return false; > } > > - if (size == 0 || bios[0] != 0x55 || bios[1] != 0xaa) { > + val1 = readb(&bios[0]); > + val2 = readb(&bios[1]); > + > + if (size == 0 || val1 != 0x55 || val2 != 0xaa) { > pci_unmap_rom(rdev->pdev, bios); > return false; > } > - rdev->bios = kmemdup(bios, size, GFP_KERNEL); > + rdev->bios = kzalloc(size, GFP_KERNEL); > if (rdev->bios == NULL) { > pci_unmap_rom(rdev->pdev, bios); > return false; > } > + memcpy_fromio(rdev->bios, bios, size); > pci_unmap_rom(rdev->pdev, bios); > return true; > }