xref: /openbmc/phosphor-webui/app/configuration/controllers/firmware-controller.html (revision 0b2bc11be6485c12bb3dff9a1ce4db4f9ac28340)
143366db7SMichael Davis<div class="row column">
243366db7SMichael Davis	<h1>Firmware</h1>
343366db7SMichael Davis	<div class="column small-12 page-header">
4706b75b3SMichael Davis		<h2 class="inline h4">Manage BMC and server firmware</h2>
59486f54aSMichael Davis	</div>
69486f54aSMichael Davis</div>
79486f54aSMichael Davis<div class="row column">
8b27188e8SMichael Davis	<p>Use the following tables to manage firmware image files. The image file that is listed as Active is used the next time that the device is booted. To change the boot order for the image, click the arrow icons.</p>
9b27188e8SMichael Davis	<p><a ng-click="gotoAnchor()">Scroll down to upload an image file</a> to transfer a new firmware image to the BMC. After uploading a new image, Activate it to make it available for use.</p>
109486f54aSMichael Davis</div>
11c016139fSIftekharul Islam<firmware-list title="BMC images" version="bmcActiveVersion" firmwares="firmwares" filter-by="filters.bmc"></firmware-list>
12c016139fSIftekharul Islam<firmware-list title="Server images" version="hostActiveVersion" firmwares="firmwares" filter-by="filters.host"></firmware-list>
139486f54aSMichael Davis<div class="row column" id="upload">
1443366db7SMichael Davis	<div class="column small-12 page-header">
15b27188e8SMichael Davis		<h2 class="inline h3 bold">Specify image file location</h2>
1643366db7SMichael Davis	</div>
1743366db7SMichael Davis	<form id="firmware__upload-form" role="form" class="firmware__upload-form">
18b27188e8SMichael Davis		<p>Specify an image file located on your workstation or a TFTP server. An image file may contain firmware images for the server, BMC, or other hardware devices. Each image that you upload will be unpacked from the image file and added to the appropriate list above.</p>
199486f54aSMichael Davis		<div class=" column firmware__upload-station">
20b27188e8SMichael Davis			<h3 class="h4 bold">Upload image file from workstation</h3>
21b27188e8SMichael Davis			<p>Select the image file saved on the workstation storage medium to upload to the server BMC.</p>
229486f54aSMichael Davis			<label for="file-upload" class="inline firmware__upload-chooser">
23c016139fSIftekharul Islam				<input id="file-upload" type="file" file="file" class="hide" onchange="angular.element(this).scope().fileNameChanged()"/>
249486f54aSMichael Davis				<span class="button btn-secondary inline">Choose a file</span>
25c016139fSIftekharul Islam				<span class="inline firmware__upload-file-name"><span ng-if="!file">No file chosen</span><span ng-if="file.name !== undefined">{{file.name}}</span></span>
2643366db7SMichael Davis			</label>
27c016139fSIftekharul Islam			<input type="button" value="Upload firmware" class="inline button btn-primary float-right" ng-click="upload()"/>
28c016139fSIftekharul Islam			<div class="inline uploading" ng-show="uploading">Upload in progress...</div>
2943366db7SMichael Davis		</div>
309486f54aSMichael Davis		<div class=" column firmware__upload-tftp">
31b27188e8SMichael Davis			<h3 class="h4 bold">Download image file from TFTP server</h3>
32b27188e8SMichael Davis			<p>Specify both the TFTP server IP address and the image file name stored on it to download to the server BMC.</p>
3343366db7SMichael Davis			<fieldset>
349486f54aSMichael Davis				<div class="row">
359486f54aSMichael Davis					<div class="column small-12 large-4">
36b27188e8SMichael Davis						<label for="tftp-ip">TFTP Server IP address</label>
3743366db7SMichael Davis						<input name="tftp-ip" id="tftp-ip" type="number"/>
3843366db7SMichael Davis					</div>
399486f54aSMichael Davis					<div class="column small-12 large-4">
4043366db7SMichael Davis						<label for="tftp-file-name">File name</label>
4143366db7SMichael Davis						<input name="tftp-file-name" id="tftp-file-name" type="text"/>
4243366db7SMichael Davis					</div>
439486f54aSMichael Davis					<div class="column small-12 large-4">
44c016139fSIftekharul Islam						<input type="submit" value="Download firmware" class="inline button btn-primary float-right"/>
459486f54aSMichael Davis					</div>
469486f54aSMichael Davis				</div>
47c016139fSIftekharul Islam				<div class="inline uploading" ng-show="downloading">Downloading in progress...</div>
4843366db7SMichael Davis			</fieldset>
4943366db7SMichael Davis		</div>
5043366db7SMichael Davis	</form>
519486f54aSMichael Davis</div>
529486f54aSMichael Davis
539486f54aSMichael Davis<!-- Firmware modals -->
54c016139fSIftekharul Islam<section class="modal" aria-hidden="true" aria-labelledby="modalTitle" aria-describedby="modalDescription" role="dialog" ng-class="{'active': display_error}">
559486f54aSMichael Davis	<div class="modal__upload-fail" role="document">
56c016139fSIftekharul Islam		<div class="screen-reader-offscreen modal-description">{{error.modal_title}}</div><!-- accessibility only; used for screen readers -->
579486f54aSMichael Davis		<div class="page-header ">
58c016139fSIftekharul Islam			<span class="icon icon__warning inline"><span class="accessible-text" role="alert">{{error.type}}</span></span>
59c016139fSIftekharul Islam			<h1 class="modal-title h4 inline">{{error.title}}</h1>
609486f54aSMichael Davis		</div>
619486f54aSMichael Davis		<div class="modal__content">
62c016139fSIftekharul Islam			<p>{{error.desc}}</p>
639486f54aSMichael Davis		</div>
649486f54aSMichael Davis		<div class="modal__button-wrapper">
65c016139fSIftekharul Islam			<button class="inline btn-primary" ng-click="display_error = false;">Close</button>
669486f54aSMichael Davis		</div>
679486f54aSMichael Davis	</div>
6843366db7SMichael Davis</section>
69c016139fSIftekharul Islam
70c016139fSIftekharul Islam<section class="modal" aria-hidden="true" aria-labelledby="modalTitle" aria-describedby="modalDescription" role="dialog" ng-class="{'active': confirm_delete}">
719486f54aSMichael Davis	<div class="modal__tftp-unreachable" role="document">
729486f54aSMichael Davis		<div class="screen-reader-offscreen modal-description">Delete firmware image</div><!-- accessibility only; used for screen readers -->
739486f54aSMichael Davis		<div class="page-header ">
749486f54aSMichael Davis			<span class="icon icon__warning inline"><span class="accessible-text" role="alert">Warning</span></span>
759486f54aSMichael Davis			<h1 class="modal-title h4 inline">Delete image</h1>
769486f54aSMichael Davis		</div>
779486f54aSMichael Davis		<div class="modal__content">
78c016139fSIftekharul Islam			<p>Delete firmware {{delete_image_version}}?</p>
799486f54aSMichael Davis		</div>
809486f54aSMichael Davis		<div class="modal__button-wrapper">
81c016139fSIftekharul Islam			<button class="inline btn-secondary" ng-click="confirm_delete=false;">Cancel</button>
82c016139fSIftekharul Islam			<button class="inline btn-primary" ng-click="confirmDeleteImage()">Continue</button>
839486f54aSMichael Davis		</div>
849486f54aSMichael Davis	</div>
859486f54aSMichael Davis</section>
86c016139fSIftekharul Islam
87c016139fSIftekharul Islam<section class="modal" aria-hidden="true" aria-labelledby="modalTitle" aria-describedby="modalDescription" role="dialog" ng-class="{'active': confirm_upload_image}">
889486f54aSMichael Davis	<div class="modal__upload" role="document">
899486f54aSMichael Davis		<div class="screen-reader-offscreen modal-description">Upload image file modal</div><!-- accessibility only; used for screen readers -->
909486f54aSMichael Davis		<div class="page-header ">
919486f54aSMichael Davis			<h1 class="modal-title h4"><span class="icon icon__info"><svg xmlns="http://www.w3.org/2000/svg"
929486f54aSMichael Davis					viewBox="0 0 32 32"><path
939486f54aSMichael Davis					d="M18 14h-6v2h1v6h-2v2h8v-2h-2z"/><circle cx="16" cy="10" r="2"/><path
949486f54aSMichael Davis					d="M16 2C8.269 2 2 8.269 2 16s6.269 14 14 14 14-6.269 14-14S23.731 2 16 2zm0 26C9.383 28 4 22.617 4 16S9.383 4 16 4s12 5.383 12 12-5.383 12-12 12z"/></svg></span>
959486f54aSMichael Davis				Upload image file
969486f54aSMichael Davis			</h1>
979486f54aSMichael Davis		</div>
989486f54aSMichael Davis		<div class="modal__content">
999486f54aSMichael Davis			<p>Uploading this image may replace a non-active image, and prevent rollback from the current active image
1009486f54aSMichael Davis				to the previous image.</p>
1019486f54aSMichael Davis		</div>
1029486f54aSMichael Davis		<div class="modal__button-wrapper">
103c016139fSIftekharul Islam			<button class="inline btn-secondary" ng-click="confirm_upload_image = false;">Cancel</button>
104c016139fSIftekharul Islam			<button class="inline btn-primary" ng-click="confirmUpload()">Continue</button>
1059486f54aSMichael Davis		</div>
1069486f54aSMichael Davis	</div>
1079486f54aSMichael Davis</section>
108c016139fSIftekharul Islam<section class="modal" aria-hidden="true" aria-labelledby="modalTitle" aria-describedby="modalDescription" role="dialog" ng-class="{'active': reboot_confirm}">
1099486f54aSMichael Davis	<div class="modal__reboot" role="document">
1109486f54aSMichael Davis		<div class="screen-reader-offscreen modal-description">Server reboot required modal</div><!-- accessibility only; used for screen readers -->
1119486f54aSMichael Davis		<div class="page-header ">
1129486f54aSMichael Davis			<h1 class="modal-title h4"><span class="icon icon__info"><svg xmlns="http://www.w3.org/2000/svg"
1139486f54aSMichael Davis					viewBox="0 0 32 32"><path
1149486f54aSMichael Davis					d="M18 14h-6v2h1v6h-2v2h8v-2h-2z"/><circle cx="16" cy="10" r="2"/><path
1159486f54aSMichael Davis					d="M16 2C8.269 2 2 8.269 2 16s6.269 14 14 14 14-6.269 14-14S23.731 2 16 2zm0 26C9.383 28 4 22.617 4 16S9.383 4 16 4s12 5.383 12 12-5.383 12-12 12z"/></svg></span>
1169486f54aSMichael Davis				Server reboot required
1179486f54aSMichael Davis			</h1>
1189486f54aSMichael Davis		</div>
1199486f54aSMichael Davis		<div class="modal__content">
1209486f54aSMichael Davis			<p>You specified a new primary firmware image. This change will not take effect until the server is powered
1219486f54aSMichael Davis				down and restarted.</p>
1229486f54aSMichael Davis		</div>
1239486f54aSMichael Davis		<a href="#/server-control/power-operations" class="bold modal__link">Go to power operations page</a>
1249486f54aSMichael Davis		<div class="modal__button-wrapper">
125c016139fSIftekharul Islam			<button class="inline btn-secondary" ng-click="reboot_confirm=false;">Cancel</button>
126c016139fSIftekharul Islam			<button class="inline btn-primary" ng-click="confirmWarmReboot()">Warm reboot</button>
1279486f54aSMichael Davis		</div>
1289486f54aSMichael Davis	</div>
1299486f54aSMichael Davis</section>
130c016139fSIftekharul Islam<section class="modal" aria-hidden="true" aria-labelledby="modalTitle" aria-describedby="modalDescription" role="dialog" ng-class="{'active': preserve_settings_confirm}">
1319486f54aSMichael Davis	<div class="modal__preserve-settings" role="document">
1329486f54aSMichael Davis		<div class="screen-reader-offscreen modal-description">Preserve setting modal</div><!-- accessibility only; used for screen readers -->
1339486f54aSMichael Davis		<div class="page-header ">
1349486f54aSMichael Davis			<h1 class="modal-title h4"><span class="icon icon__info"><svg xmlns="http://www.w3.org/2000/svg"
1359486f54aSMichael Davis					viewBox="0 0 32 32"><path
1369486f54aSMichael Davis					d="M18 14h-6v2h1v6h-2v2h8v-2h-2z"/><circle cx="16" cy="10" r="2"/><path
1379486f54aSMichael Davis					d="M16 2C8.269 2 2 8.269 2 16s6.269 14 14 14 14-6.269 14-14S23.731 2 16 2zm0 26C9.383 28 4 22.617 4 16S9.383 4 16 4s12 5.383 12 12-5.383 12-12 12z"/></svg></span>
1389486f54aSMichael Davis				Preserve settings
1399486f54aSMichael Davis			</h1>
1409486f54aSMichael Davis		</div>
1419486f54aSMichael Davis		<div class="modal__content">
142*0b2bc11bSMichael Davis			<p>Booting to a different firmware image will reset the user settings for the BMC. Choose either the option to reset both the user and network settings or the option to preserve the network settings for the newly active firmware image.</p>
1439486f54aSMichael Davis			<form>
1449486f54aSMichael Davis				<fieldset>
1459486f54aSMichael Davis					<div class="row column">
1469486f54aSMichael Davis						<label class="control-radio bold" for="preserve-settings">Preserve network settings
1479486f54aSMichael Davis							<input type="radio" name="preserve-settings" id="preserve-settings" ng-checked="true" ng-model="dhcp" ng-value="true" ng-init="dhcp=true"/>
1489486f54aSMichael Davis							<span class="control__indicator control__indicator-on"></span>
1499486f54aSMichael Davis						</label>
1509486f54aSMichael Davis					</div>
1519486f54aSMichael Davis					<div class="row column">
152ec6bcd10SIftekharul Islam						<label class="control-radio bold" for="reset-settings">Reset both user and network settings
1539486f54aSMichael Davis							<input type="radio" name="reset-settings" id="reset-settings" ng-model="dhcp" ng-value="false"/>
1549486f54aSMichael Davis							<span class="control__indicator control__indicator-on"></span>
1559486f54aSMichael Davis						</label>
1569486f54aSMichael Davis					</div>
1579486f54aSMichael Davis				</fieldset>
1589486f54aSMichael Davis			</form>
1599486f54aSMichael Davis		</div>
1609486f54aSMichael Davis		<div class="modal__button-wrapper">
161c016139fSIftekharul Islam			<button class="inline btn-secondary" ng-click="preserve_settings_confirm=false;">Cancel</button>
162c016139fSIftekharul Islam			<button class="inline btn-primary" ng-click="preserveSettingsConfirmed()">Continue</button>
1639486f54aSMichael Davis		</div>
1649486f54aSMichael Davis	</div>
1659486f54aSMichael Davis</section>
166c016139fSIftekharul Islam<div class="modal-overlay" tabindex="-1" ng-class="{'active': (display_error || confirm_upload_image || reboot_confirm || preserve_settings_confirm)}"></div>